[英]SetApartmentState and [STAThread]
在Watin的源代碼中 ,有這段代碼:
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
不在別處使用。 只需閱讀STAThreadAttribute
的文檔(強調我的):
將此屬性應用於入口點方法(C#和Visual Basic中的
Main()
方法)。 它對其他方法沒有影響。 要設置從代碼開始的線程的單元狀態,請在啟動線程之前使用Thread.SetApartmentState
方法。
因此,在這種情況下,該屬性應該沒有任何效果。
應該注意的是,STA(單線程單元)是pre-.Net Visual Basic使用的線程模型。 它應僅用於將暴露給COM的組件的Main方法。 您試圖理解的代碼的作者,顯然不明白它應該如何使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.