Запуск 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?
Спасибо
Ответы
Ответ 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();