2012-12-15 51 views
0

我正在使用SharpBITS(http://sharpbits.codeplex.com/),這是一個運行良好的用於.NET的BITS包裝器。我不太確定,但認爲BITS必須在單線程公寓(STA)中運行。使用舊版本時,在多線程單元(MTA)中運行BITS時出現了一些問題,例如對於.NET控制檯應用程序的默認值。在BITS文檔或Internet上我沒有找到任何有關這方面的信息。必須BITS(後臺智能傳輸服務)使用STA?

即使SharpBITS嘗試將BitsManager的構造函數中的單元狀態設置爲STA(實際上只有在線程啓動前之前可能有)。

有人知道BITS是否真的必須在STA中運行?當前版本似乎也運行在MTA中。

回答

2

不可以。各種版本的BackgroundCopyManager coclass都在註冊表中註冊,ThreadingModel鍵設置爲「Both」。這意味着您可以在MTA線程中創建一個線程(您自己創建的任何線程或控制檯應用程序的主線程的缺省線程),並且不會調用呼叫。如果你在STA線程中創建一個,那麼調用將被封送回該線程。

是的,MTA可能會產生問題,因爲現在由您來確保您自己的代碼是線程安全的。從STA線程獲得很多保證,您實際上借用了COM提供的線程安全性。沒有這樣的MTA保證,你必須確保你的代碼像BITS一樣是線程安全的。您將從BITS得到的通知將是典型的麻煩製造者,需要鎖定以保護您自己的狀態。

+0

優秀的答案。謝謝,漢斯。 –

相關問題