似乎有兩種設置線程套間的方式,第一種是在函數前面加上一個屬性:
[STAThread]
void f1()
{
...
}
第二種是不寫[STAThread],而是給Thread對象設置ApartmentState屬性:
Program obj = new Program();
Thread t1 = new Thread(obj.f1);
t1.SetApartmentState(ApartmentState.STA);
t1.Start();
我實驗了一下,對於com組件的調用而言,好像只有第二種情況是真的設置了STA線程套間屬性,第一種似乎沒有起作用。我的問題是:
這兩種方式有什麼區別嗎? 第一種方式在什麼時候用是有效的?
------解決方案--------------------
以下是MSDN對STAThreadAttribute類的參考:
引用 MSDN:
...
將此屬性應用於入口點方法(C# 和 Visual Basic 中的 Main() 方法)。它對其他方法無效。
...
http://msdn.microsoft.com/zh-cn/library/system.stathreadattribute%28v=vs.80%29.aspx