c# - BackgroundWorker RunWorkerCompleted 事件

标签 c# .net multithreading events backgroundworker

我的 C# 应用程序有几个后台工作程序。有时,一名后台工作人员会解雇另一名后台工作人员。当第一个后台工作程序完成并触发 RunWorkerCompleted 事件时,该事件将在哪个线程上触发,UI 还是调用 RunWorkerAsync 的第一个后台工作程序?我正在使用 Microsoft Visual C# 2008 Express Edition。如果您有任何想法或建议,我们将不胜感激。谢谢。

最佳答案

如果 BackgroundWorker 是从 UI 线程创建的,那么 RunWorkerCompleted 事件也会在 UI 线程上引发。

如果它是从后台线程创建的,则事件将在未定义的后台线程上引发(不一定是同一线程,除非您使用自定义 SynchronizationContext)。

有趣的是,这在 MSDN 上似乎并没有得到很好的记录。我能找到的最佳引用是 here :

The preferred way to implement multithreading in your application is to use the BackgroundWorker component. The BackgroundWorker component uses an event-driven model for multithreading. The background thread runs your DoWork event handler, and the thread that creates your controls runs your ProgressChanged and RunWorkerCompleted event handlers. You can call your controls from your ProgressChanged and RunWorkerCompleted event handlers.

关于c# - BackgroundWorker RunWorkerCompleted 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2806814/

相关文章:

c# - 如何将byte []视为Int16 []?

c# - 单击标题时扩展器不展开

c# - C# 中有指数运算符吗?

c# - 如何更改按下键盘按键时的 TrackBar 控件操作?

c# - Dns.GetHostAddresses 真的取回所有已注册的 IP 吗?

java - 关于 wait 和 notifyAll

multithreading - 使用 Delphi XE7 并行库

c# - Toolstrip 容器中的 Toolstrip 顺序

.net - 异常处理 ASP.NET MVC Web API

c++ - OpenGL函数需要调用两次才能生效