簡體   English   中英

在C#中啟動STAThread

[英]Starting an STAThread in C#

我還是C#的新手,尤其是C#中的線程。 我正在嘗試啟動一個需要單線程單元( STAThread )的函數

但是我無法編譯以下代碼:

該函數在名為MyClass的單獨類中如下所示:

internal static string DoX(string n, string p)
        {
            // does some work here that requires STAThread
        }

我已經在函數頂部嘗試了[STAThread]屬性,但是這不起作用。

所以我試圖創建一個新的線程,如下所示:

 Thread t = new Thread(new ThreadStart(MyClass.DoX));

但這不會編譯(最佳的重載方法具有無效的參數錯誤)。 但是,在線示例非常相似(此處示例),我在做錯什么,如何簡單地使函數在新的STA線程中運行?

謝謝

Thread thread = new Thread(() => MyClass.DoX("abc", "def"));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

如果需要該值,則可以將其“捕獲”回一個變量,但是請注意,直到另一個線程結束時,該變量才具有該值:

int retVal = 0;
Thread thread = new Thread(() => {
    retVal = MyClass.DoX("abc", "def");
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

或更簡單:

Thread thread = new Thread(() => {
    int retVal = MyClass.DoX("abc", "def");
    // do something with retVal
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

暫無
暫無

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

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