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

C# 在BackgroundWorker.RunCompleted处理程序中引发事件,c#,multithreading,C#,Multithreading,我有一个在线程X上构造的类Foobar的实例。我有一个只应从线程X调用的函数StartWork()。为了避免创建bug,我通过检查Debug.Assert(CreatorID==Environment.CurrentManagedThreadId)强制执行此约束。该函数启动BackgroundWorker的异步操作。我已确保在工作程序通过挂接到RunWorkerCompleted完成其操作时调用WorkCompleted() 出于线程安全原因,应在线程X上执行WorkCompleted(),因为

我有一个在线程X上构造的类
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
事件

可能重复的