STAThread方法属性和“线程单元状态”之间有什么区别?

时间:2018-08-22 06:55:48

标签: wpf .net-4.0 thread-safety

我认为我对何时需要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组件都需要这样做。

1 个答案:

答案 0 :(得分:1)

请参见STAThread​Attribute页上的Remarks

  

将此属性应用于入口点方法(在C#和Visual Basic中为Main()方法)。它对其他方法没有影响。要设置在代码中启动的线程的暂留状态,请在启动线程之前使用Thread.SetApartmentState或Thread.TrySetApartmentState方法。