它是如何知道何时/不要在它的progresschanged事件处理程序中封送对UI线程的调用?
我知道SynchronizationContext.Current可以做到这一点,但是这个属性只在主UI线程中设置,如果backgroundworker是在另一个后台线程上创建的呢?
有人可以解释一下吗?
答案 0 :(得分:4)
根据Reflector,从UI线程调用的 BackgroundWorker.RunWorkAsync 使用AsyncOperationManager.CreateOperation。
此方法访问SynchronizationContext.Current(如果不存在则创建新的)。
因此在启动BGW时会保存SynchronizationContext。