C# 在BackgroundWorker.RunCompleted处理程序中引发事件
我有一个在线程X上构造的类C# 在BackgroundWorker.RunCompleted处理程序中引发事件,c#,multithreading,C#,Multithreading,我有一个在线程X上构造的类Foobar的实例。我有一个只应从线程X调用的函数StartWork()。为了避免创建bug,我通过检查Debug.Assert(CreatorID==Environment.CurrentManagedThreadId)强制执行此约束。该函数启动BackgroundWorker的异步操作。我已确保在工作程序通过挂接到RunWorkerCompleted完成其操作时调用WorkCompleted() 出于线程安全原因,应在线程X上执行WorkCompleted(),因为
Foobar
的实例。我有一个只应从线程X调用的函数StartWork()
。为了避免创建bug,我通过检查Debug.Assert(CreatorID==Environment.CurrentManagedThreadId)
强制执行此约束。该函数启动BackgroundWorker
的异步操作。我已确保在工作程序通过挂接到RunWorkerCompleted
完成其操作时调用WorkCompleted()
出于线程安全原因,应在线程X上执行WorkCompleted()
,因为它会发送事件通知。如果这些通知是从错误的线程广播的,我想程序可能会遇到无法预见的线程安全问题
然而,在我的测试中,我注意到
WorkCompleted()
并没有像我预期的那样从线程X调用。如何修复程序,以防止引发这些事件时可能出现的任何线程安全问题?我处理问题的方法有误吗?我已经意识到,我仍然需要使我的BackgroundWorker.DoWork
处理程序线程安全。我能够通过在UI线程上创建Foobar
的实例,使RunWorkerCompleted
处理程序在同一线程上运行。相关代码段来自:
如果BackgroundWorker
是从UI线程创建的,则也会在UI线程上引发RunWorkerCompleted
事件
可能重复的