[翻译]为什么需要单线程套间(STAThread)
在Main方法的顶部,你会发现有趣的声明
[STAThread]
static void Main() {
static void Main() {
许多人会问这是什么,实际中需要这个吗?
Windows窗体不支持多线程或者无线程套间。基于Windows窗体的应用应该始终声明它们使用的套间类型,不然一些组件会错误地初始化线程的套间状态。
如果应用不能控制当前线程的套间状态,它将启动一个新的线程。
下面是一个例子:
using System.Threading;
Thread t = new Thread(new ThreadStart(StartNewStaThread));
// Make sure to set the apartment state BEFORE starting the thread.
t.ApartmentState = ApartmentState.STA;
t.Start();
private void StartNewStaThread() {
Application.Run(new Form1());
}
Thread t = new Thread(new ThreadStart(StartNewStaThread));
// Make sure to set the apartment state BEFORE starting the thread.
t.ApartmentState = ApartmentState.STA;
t.Start();
private void StartNewStaThread() {
Application.Run(new Form1());
}
相关文档:
可以使用 t.SetApartmentState(ApartmentState.STA)取代 using t.ApartmentState;
如果你不想人为的设置,你就应该将[STAThread]放在开始新的STA线程方法之前。
Thread t = new Thread(new ThreadStart(StartNewStaThread));
t.Start();
[STAThread]
private void StartNewStaThread() {
Application.Run(new Form1());
}
t.Start();
[STAThread]
private void StartNewStaThread() {
Application.Run(new Form1());
}
原文:http://blogs.msdn.com/jfoscoding/archive/2005/04/07/406341.aspx