我认为我对何时需要STAThread有基本的了解,但是下面的方法有什么问题呢?
当创建一个新线程时,设置了“公寓状态”不会有任何问题,但是当我使用STAThread属性装饰该方法时,会出现一个异常,指出需要STA线程。
[STAThread]
public void DoSomething()
{
//Does something
}
VS
public void DoSomething()
{
Thread thread = new Thread(new ThreadStart(() => //Does Something );
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
System.Windows.Markup.XamlParseException HResult = 0x80131501
Message ='在类型上调用构造函数 符合指定条件的“ System.Windows.Controls.UserControl” 约束条件引发了异常。”行号“ 4”和行 位置“ 6”。>内部异常1:InvalidOperationException:调用线程必须 成为STA,因为许多UI组件都需要这样做。
答案 0 :(得分:1)
请参见STAThreadAttribute
页上的Remarks:
将此属性应用于入口点方法(在C#和Visual Basic中为
Main()
方法)。它对其他方法没有影响。要设置在代码中启动的线程的暂留状态,请在启动线程之前使用Thread.SetApartmentState或Thread.TrySetApartmentState方法。