gpt4 book ai didi

c# - 保持 Backgroundworker 存活

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:35 26 4
gpt4 key购买 nike

我有一个调用异步方法的 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(它处理所有消息)吗?其他解决方案?

最佳答案

您根本不应该使用 BackroundWorker。 BGW 用于在另一个线程中执行 CPU 绑定(bind) 工作。您正在尝试调用异步操作。完全废弃 BGW。在 UI 线程中启动异步操作,并在该操作完成后在回调方法中执行您需要执行的任何操作。

如果你愿意,你可以使用Task Parallel Library将异步操作封装在一个Task中,结合await关键字,它允许一个更强大的如果需要,用于执行异步操作的语法。

关于c# - 保持 Backgroundworker 存活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com