.NET 下 STA(單執行緒套間/單元)的意義

iDotNetSpace發表於2010-05-10
STA本身不是.NET平臺的產物,它起原於1993年面世的COM(元件物件模型)的釋出.
多麼希望我是一個COM程式設計的高手,以至於將.NET中這個問題描述的更加透徹.
必境CLR的前身就是COM,當CLR還在被開發時,它有過的名字有COM+,COM3.

1 COM 執行緒模型
   COM執行緒本質就是win32執行緒,只不過重新定義了術語而已.
   對應於win32的UI執行緒的COM執行緒叫單執行緒套間,而非UI執行緒叫自由執行緒.
   每個STA都有一個隱藏的USER32視窗,並且具有訊息迴圈機制用於處理windows訊息事件.

2 .NET中為什麼要引入STA?
   我並不知道真實的原因,但是我卻知道一些.NET中需要STA機制理由,我想就是真正的原因.
   與COM互操作這個理由足夠充分,ASP.NET Framework是從COM自然發展而來的,為了實現向後相容,COM互操作允許對現有的COM元件進行訪問而無需修改原始元件.
   由於COM類使用套間,因此CLR需要在COM互操作的情況下建立並初始化一個套間(STA/MTA).
   單執行緒套間中只能有一個執行緒在執行,這就是它名字的含義,所以COM元件就省掉了許多物件同步的煩腦.
   單執行緒套間中建立的元件,只能由建立它的那個執行緒訪問,這非常類似於WIN FORMS程式設計中的UI元件的更新,必須由UI執行緒來處理(大多數開發者都用過Control.Invoke吧).
   在.NET類庫中就有一些類,它們必須執行在STA模式中.例如:System.Windows.Forms.Clipboard, WebBrowser.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-662335/,如需轉載,請註明出處,否則將追究法律責任。

相關文章