Подтвердить что ты не робот

Запуск STAThread в С#

Я все еще новичок в С#, и особенно в Threading на С#. Я пытаюсь запустить функцию, которая требует однопоточной квартиры (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?

Спасибо

4b9b3361

Ответ 1

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();