在Watin的source code中,有这段代码:
public void NavigateToNoWait(Uri url)
{
var thread = new Thread(GoToNoWaitInternal);
thread.SetApartmentState(ApartmentState.STA);
thread.Start(url);
thread.Join(500);
}
[STAThread]
private void GoToNoWaitInternal(object uriIn)
{
var uri = (Uri)uriIn;
NavigateTo(uri);
}
由于创建的线程设置了其单元状态,为什么[STAThread]
属性被添加到方法中?我对特定的代码段不感兴趣,但我想知道是否需要STAThread
属性。
注意:
GoToNoWaitInternal
未在其他地方使用。答案 0 :(得分:8)
请阅读STAThreadAttribute
(强调我的)文档:
将此属性应用于入口点方法(C#和Visual Basic中的
Main()
方法)。 它对其他方法没有影响。要设置您在代码中开始的线程的单元状态,请在启动线程之前使用Thread.SetApartmentState
方法。
因此,在这种情况下,该属性应该没有效果。
答案 1 :(得分:3)
应该注意的是,STA(单线程单元)是pre-.Net Visual Basic使用的线程模型。它应仅用于将暴露给COM的组件的Main方法。您试图理解的代码的作者,显然不明白它应该如何使用。