在BackgroundWorker.RunCompleted处理程序中引发事件

时间:2012-10-20 15:02:12

标签: c# multithreading

我有一个在线程X上构造的类Foobar的实例。我有一个只能从线程X调用的函数StartWork()。为了避免创建错误,我通过检查{强制执行此约束{1}}。该函数启动Debug.Assert(CreatorID == Environment.CurrentManagedThreadId)的异步操作。我确保当工人通过挂钩BackgroundWorker完成其操作时调用WorkCompleted()

出于线程安全的原因,应该在线程X上执行RunWorkerCompleted,因为它会发送事件通知。如果这些通知是从错误的线程广播的,那么程序可能会遇到无法预料的线程安全问题,我猜想。

但是,在我的测试中,我注意到{I}没有像我预期的那样从线程X调用WorkCompleted()。如何修复程序以防止出现这些事件可能引起的任何线程安全问题?我是否错误地接近了这个问题?我已经意识到我仍然需要使我的WorkCompleted()处理程序是线程安全的。

1 个答案:

答案 0 :(得分:0)

通过在UI线程上创建RunWorkerCompleted的实例,我能够让Foobar处理程序在同一个线程上运行。来自this answer的相关摘要:

  

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

相关问题