【发布时间】:2015-09-03 18:32:43
【问题描述】:
我有一个调用异步方法的BackgroundWorker。 async 方法提供了一个回调参数,让我知道它已经完成。
//Bunch of stuff to prep for the call happens first
SomeAsyncMethodIn3rdPartyDll(callback);
//A few more clean up operations after the call
我遇到的问题是BackgroundWorker 在调用回调之前完成,因此由于线程已死,因此它永远不会被调用。
我当前(工作)的解决方案是在我的 DoWork 方法的末尾添加这个:
while (keepAlive)
{
Application.DoEvents();
System.Threading.Thread.Sleep(100);
}
然后,当我收到回调时,我只需将 keepAlive 的值设置为 false。
这看起来很老套,尤其是使用Application.DoEvents() 命令来触发回调。
所以,我想知道的是:有没有更好的方法让线程保持活力?或者,我可以指定我想要处理哪些消息而不是DoEvents(所有消息都处理)?其他解决方案?
【问题讨论】:
-
嗯,这必须是 COM 组件才能表现得像这样。 BGW 对于此类组件来说是一个非常不利的地方,你真的应该避免它。鉴于它支持回调,常规 UI 线程应该已经足够好了。如果没有,请确保为组件创建an STA thread,以便它拥有一个快乐的家。不要急于杀死它。
标签: c# multithreading backgroundworker