.NET 下 STA(單執行緒套間/單元)的意義
多麼希望我是一個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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 多執行緒下的單例執行緒單例
- COM套間和執行緒模型.執行緒模型
- 執行緒1-單執行緒執行緒
- redis 單執行緒Redis執行緒
- 簡單的執行緒池執行緒
- JavaScript單執行緒概念JavaScript執行緒
- Redis-單執行緒Redis執行緒
- Redis--單執行緒Redis執行緒
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- 簡單的執行緒池(八)執行緒
- 簡單的執行緒池(七)執行緒
- 簡單的執行緒池(九)執行緒
- 簡單的執行緒池(六)執行緒
- 如何理解JS的單執行緒?JS執行緒
- 簡單的執行緒池(四)執行緒
- 簡單的執行緒池(三)執行緒
- 簡單的執行緒池(二)執行緒
- 執行緒安全的單例模式執行緒單例模式
- Java簡單多執行緒斷點下載Java執行緒斷點
- 伺服器模型——從單執行緒阻塞到多執行緒非阻塞(下)伺服器模型執行緒
- .NET下多執行緒初探執行緒
- SingleThreadExecutor(單執行緒執行器)thread執行緒
- 執行緒和執行緒池的理解與java簡單例子執行緒Java單例
- 深入理解JavaScript執行(單執行緒的JS)JavaScript執行緒JS
- 瀏覽器多執行緒和js單執行緒瀏覽器執行緒JS
- 多執行緒下指令重排與DCL單列模式執行緒模式
- 關於redis單執行緒的分析Redis執行緒
- wxWidgets簡單的多執行緒執行緒
- 如何執行指定的單元測試
- Java多執行緒—執行緒同步(單訊號量互斥)Java執行緒
- 以生活例子說明單執行緒與多執行緒執行緒
- redis為什麼用單執行緒不用多執行緒Redis執行緒
- 單執行緒的js是如何工作的執行緒JS
- JS單執行緒和非同步JS執行緒非同步
- Redis之單執行緒 Reactor 模型Redis執行緒React模型
- 簡單C++執行緒池C++執行緒
- kotlin 非同步執行緒簡單事例,加http請求,非同步執行緒之間的通訊Kotlin非同步執行緒HTTP
- redis自學(22)Redis是單執行緒還是多執行緒?Redis執行緒