2014-11-14 43 views

回答

3

不,沒有這樣的保證。如果你想從多個線程訪問它,你需要自己同步訪問任何共享內存。

當然,如果您使用BGW內置的線程之間傳遞數據的機制,比如通過它存儲的ResultProgress數據,那麼它將正確地同步訪問該數據。

2

是的,只要您遵循BackgroundWorker合同,這不是您必須擔心的事情。換句話說,使用提供的事件將數據傳遞給UI線程ProgressChanged和RunWorkerCompleted。 .NET Framework源代碼沒有爲此評分任何優雅點,但同步並不明確。這很常見,它依賴於許多地方的隱式同步。

但有兩個確保UI線程可以看到更新。首先是PostMessage(),它是一個winapi函數,用於發信號通知UI線程需要查看調用隊列。 Used here,但是你根本看不到鎖,它被埋在了Windows的內部。 可以更容易識別的看到的內容是在清空調用隊列的Winforms代碼中。它在開始迭代該隊列之前需要一個鎖。你可以看到it here,它是threadCallbackList成員上的鎖。

相關問題