2
它是如何知道何時/不是在其progresschanged事件處理程序中編組調用UI線程?BackgroundWorker如何在底層工作?
我知道SynchronizationContext.Current可以做到這一點,但此屬性只在主UI線程中設置,如果backgroundworker是在另一個後臺線程上創建的,該怎麼辦?
任何人都可以解釋一下嗎?
它是如何知道何時/不是在其progresschanged事件處理程序中編組調用UI線程?BackgroundWorker如何在底層工作?
我知道SynchronizationContext.Current可以做到這一點,但此屬性只在主UI線程中設置,如果backgroundworker是在另一個後臺線程上創建的,該怎麼辦?
任何人都可以解釋一下嗎?
根據反射器,BackgroundWorker.RunWorkAsync從UI線程調用它使用AsyncOperationManager.CreateOperation。
此方法訪問SynchronizationContext.Current(或創建一個新的如果不存在)。
因此,在啓動BGW時保存了SynchronizationContext。
創建一個新的如果不存在,這是關鍵點。謝謝。 – Benny 2009-12-22 08:47:56