任何一個WPF程序,Main方法前必須有一個[STAThread]特性,不然編譯會失敗。這個特性用來申明該應用程序的初始線程模型爲STA,以便和COM兼容。STA是.NET以前,舊的COM年代的詞彙。多線程
STA: Single-Thread Apartment, 中文叫單線程套間。就是在COM庫初始化的時候建立一個內存結構,而後讓它和調用CoInitialize的線程相關聯。這個內存結構針對每一個線程都會有一個。支持STA的COM對象只能在建立它的線程裏被使用,其它線程若是再建立它就會失敗。線程
MTA: Mutil-Thread Apartment,中文叫多線程套間。COM庫在進程中建立一個內存結構,這個內存結構在整個進程中只能有一個,而後讓它和調用CoInitializeEx的線程相關聯。支持MTA的COM對象能夠在任意線程裏被使用。多有針對它的調用都會被封裝成爲消息。對象
其實STA和MTA是COM規定的一套線程模型,用於保障多線程狀況下你的組件代碼的同步。好比說有一個COM對象它內部有一個靜態變量 gHello,那麼這個對象不管生成多少實例對於gHello在內存中只能有一份,那麼若是有兩個不一樣的實例在兩個線程裏面同時去讀寫它,就有可能出錯,因此就要就要有種機制進行同步保護,STA或者MTA就是這種機制。進程
http://hi.baidu.com/hanyidai/item/55fc974e0b35282310ee1e09內存