Saturday, September 1, 2012

C#中[STAThread]的作用

[STAThread]即 single-threaded apartment

每個Thread都有一個關於ApartmentState的屬性,可以把它設置為:STA或者MTA,或者UNKNOWN。
當你想指定工程的啟動窗口的時候,你需要在該窗口類中申明一個Main()方法,並為這個方法設置[STAThread]屬性。

[STAThread]是Single Thread Apartment單線程套間的意思,是一種線程模型,用在程序的入口方法上

(在C#和VB.NET裡是Main()方法),來指定當前線程的ApartmentState 是STA。用在其他方法上不產生影響。

在aspx頁面上可以使用AspCompat = "true" 來達到同樣的效果。這個屬性只在 Com Interop 有用,如果全部是 m​​anaged code 則無用。簡單的說法:[STAThread]指示應用程序的默認線程模型是單線程單元(STA)。

啟動線程模型可設置為單線程單元或多線程單元。如果未對其進行設置,則該線程不被初始化。也就是說如果你用的.NET Framework,並且沒有使用COM Interop,一般不需要這個Attribute。其它的還有MTA(多線程套間)、Free Thread(自由線程)。

單線程套間,簡單來說所有對於單線程套間中對象的訪問都是通過消息來傳遞的,所以同一時間只有一個線程能夠訪問單線程套間中的對象。

No comments:

Post a Comment