BackgroundWorker如何在幕后工作?

时间:2009-12-22 08:26:06

标签: c# backgroundworker

它是如何知道何时/不要在它的progresschanged事件处理程序中封送对UI线程的调用?

我知道SynchronizationContext.Current可以做到这一点,但是这个属性只在主UI线程中设置,如果backgroundworker是在另一个后台线程上创建的呢?

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

根据Reflector,从UI线程调用的 BackgroundWorker.RunWorkAsync 使用AsyncOperationManager.CreateOperation。

此方法访问SynchronizationContext.Current(如果不存在则创建新的)。

因此在启动BGW时会保存SynchronizationContext。