Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在等待委托完成时保持UI线程运行?_C#_Multithreading_User Interface_Asynchronous_Delegates - Fatal编程技术网

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
关键字,例如。

参考“异步调用完成时执行回调方法”。那么回调是我唯一的选择吗?