簡體   English   中英

SetApartmentState和[STAThread]

[英]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不在別處使用。
  • 整個watin項目是關於操縱WebBrowser對象(一般的Internet Explorer窗口)。 因此,我們正在操縱COM對象。

只需閱讀STAThreadAttribute的文檔(強調我的):

將此屬性應用於入口點方法(C#和Visual Basic中的Main()方法)。 它對其他方法沒有影響。 要設置從代碼開始的線程的單元狀態,請在啟動線程之前使用Thread.SetApartmentState方法。

因此,在這種情況下,該屬性應該沒有任何效果。

應該注意的是,STA(單線程單元)是pre-.Net Visual Basic使用的線程模型。 它應僅用於將暴露給COM的組件的Main方法。 您試圖理解的代碼的作者,顯然不明白它應該如何使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM