[STAThread]是Single Thread Apartment單線程套間的意思,是一種線程模型,用在程序的入口方法上(在C#和VB.NET里是Main()方法),來指定當前線程的ApartmentState 是STA。用在其他方法上不產生影響。在aspx頁面上可以使用AspCompat = "true" 來達到同樣的效果。這個屬性只在 Com Interop 有用,如果全部是 managed code 則無用。簡單的說法:[STAThread]指示應用程序的默認線程模型是單線程單元 (STA)。啟動線程模型可設置為單線程單元或多線程單元。如果未對其進行設置,則該線程不被初始化。也就是說如果你用的.NET Framework,并且沒有使用COM Interop,一般不需要這個Attribute。其它的還有MTA(多線程套間)、Free Thread(自由線程)。單線程套間,簡單來說所有對于單線程套間中對象的訪問都是通過消息來傳遞的,所以同一時間只有一個線程能夠訪問單線程套間中的對象。例如:class MainClass
{
[STAThread]
static void Main(string[] args)
{
Teacher teacher = new Teacher();
Student student = new Student();
student.AdviseDelegateInstance = new Student.AdviseDelegate(teacher.Advise);
Console.WriteLine("Student got 49");
student.SetScore(49);
Console.WriteLine("Student got 87");
student.SetScore(87);
Console.ReadLine();
}
}表示這個Main程序被一個單線程套間包住,且Main的執行,一次只能被一個線程占用,這個線程未執行完,別的線程是沒辦法調用的。
新聞熱點
疑難解答