C# 在等待委托完成时保持UI线程运行?
在我的代码中,我使用C# 在等待委托完成时保持UI线程运行?,c#,multithreading,user-interface,asynchronous,delegates,C#,Multithreading,User Interface,Asynchronous,Delegates,在我的代码中,我使用BeginInvoke启动一个委托(从文件中加载一些配置)。我希望我的UI保持响应性,因此我认为这样做会奏效: LoadConfig lc = new LoadConfig(doLoadConfig); IAsyncResult asyncResult = lc.BeginInvoke(null, null); while (!asyncResult.IsCompleted) { asyncResult.AsyncWaitHandle.WaitOne(
BeginInvoke
启动一个委托(从文件中加载一些配置)。我希望我的UI保持响应性,因此我认为这样做会奏效:
LoadConfig lc = new LoadConfig(doLoadConfig);
IAsyncResult asyncResult = lc.BeginInvoke(null, null);
while (!asyncResult.IsCompleted)
{
asyncResult.AsyncWaitHandle.WaitOne(500, false);
}
asyncResult.AsyncWaitHandle.Close();
bool bLoadResult = lc.EndInvoke(asyncResult);
问题是它挂在等待位上。我是否可以在保持UI线程活动的同时等待委托完成(有点像在.NET4.5中使用async
/wait
)
我正在使用.NET3.5 BTW
那么回调是我唯一的选择吗 我知道对
DoEvents
使用轮询很有诱惑力,但那是错误的。为了保持UI的响应性,您需要返回UI线程消息循环。也就是说,您必须从当前方法返回,并在将来触发完成事件时异步(通过回调)处理它
在C#5.0中,需要解决回调地狱问题。在早期版本中,您可以利用
yield
关键字,例如。参考“异步调用完成时执行回调方法”。那么回调是我唯一的选择吗?