【发布时间】:2013-07-19 05:34:42
【问题描述】:
假设我有一个 API 事件,我必须返回一个结果。 我必须做的计算使用异步方法,它创建一个控件(必须在 UI 线程上运行)。
private async void API_QueryControl(object sender, APIEventArgs e)
{
e.Result = await CreateControl();
}
private async Task<Control> CreateControl()
{
await Task.Delay(1000);
return new Panel();
}
现在,这显然行不通,因为 API_QueryControl 在我设置结果之前就产生了。我无法控制 API,这意味着无法更改事件。如何让事件等待结果?
【问题讨论】:
-
你没有。您可以阻止 UI 线程、更改或不使用该方法、找到更快的方法来计算值等。
-
如何通过阻塞 UI 线程使其工作? CreateControl().Result、CreateControl().Wait() 等导致死锁。
-
在这种情况下阻止 UI 线程的一种方法是不使用异步... ;-)
标签: c# events asynchronous return