- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个调用异步方法的 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/
我更喜欢使用 io_service 的方式是在应用程序启动时创建一个线程来执行 io_service的运行方法。问题是,如果 io_service 没有任务,它的 run 方法立即返回并且线程终止。
我有一个调用异步方法的 BackgroundWorker。 async 方法提供了一个回调参数,让我知道它已完成。 //Bunch of stuff to prep for the call happ
我正在使用Gitlab Autodevops在我的kubernetes集群上部署应用程序。该应用应始终仅运行一个实例。 问题是,在更新过程中,Helm在新的Pod准备就绪之前会杀死当前正在运行的Pod
在页面刷新后显示 ExtJs 应用程序的最佳方式是什么? 示例:位于 x,y 位置的窗口带有一些面板。 最佳答案 查看 stateId 属性以及在 ExtJs 中如何保存状态:http://docs.
我必须重定向到 zk 中的 tel:**** 链接,并在用户完成调用后,将他重定向到另一个页面。问题是,当我单击链接时,ZK 认为我将离开浏览器,并自动完成我的客户端 session (尽管我确实在页
我有一个适用于 IOS 的位置跟踪器应用程序,即使应用程序处于后台模式,它也应该发送当前位置。但是当应用程序进入后台模式时,socket.io 就会死掉。有没有办法让它保持活力? 最佳答案 您不应将
我正在使用 C# MVC 开发 Web 应用程序并使用 Session 在多个请求之间保留数据。 有时 session 超时,所以我想办法让它保持事件状态,并在 stackoverflow 中找到了一
我从 Activity B 启动 Activity A 。但是当我启动 A 时, B 被摧毁了。结果 A 暂时显示,然后被销毁。即使在 B 被摧毁后,我如何让 A 活着。这就是我从 B 启动 A 的方
所以,即使在输入 onError() 之后,我也想保持 observable keep alive(不丢弃),所以我可以输入 onNext() 我已经关注this answer 通过添加 .catch
我是一名优秀的程序员,十分优秀!