March 2,2007
MTA / STA 屬性影響.NET下的 COM Interop
MTA 和 STA 屬性通常會被定義在.NET程式的Main函式的Class上
而當在.NET平台下以Interop的方式載入COM物件的時候,其內部會根據你呼叫時程式的Thread定義,來採取不同的建構方式。
MTA >> CoInitializeEx(NULL, COINIT_MULTITHREADED)
STA >> CoIntializeEx(NULL, COINIT_APARTMENTTHREADED)
Unknow >> CoInitializeEx(NULL, COINIT_MULTITHREADED)
其中以CoIntializeEx(NULL, COINIT_APARTMENTTHREADED)所建立的COM物件,是無法在.NET環境下跨Thread使用的(你會得到一個Query Interface 失敗的 Exception)。所以若要在.NET下跨Thread使用COM物件,請記得將STA修改成MTA。