в .NET, как мне установить STAThread, когда я запускаю форму в дополнительном потоке? - PullRequest
0 голосов
/ 28 апреля 2009

Я запускаю форму во втором потоке. Если я нажимаю Ctrl-C, чтобы скопировать текст в буфер обмена, я получаю исключение: «Текущий поток должен быть настроен на однопотоковую квартиру (STA), прежде чем можно будет выполнять вызовы OLE. (Использование буфера обмена, очевидно, предполагает OLE). *

Помещение [STAThread] в мой процесс потока, который является точкой входа моего второго потока, работает НЕ . Что будет работать?

[STAThread]
private void MyFormThreadproc(object o)
{
    form = new MyForm();
    Application.Run(form);
}

1 Ответ

7 голосов
/ 28 апреля 2009

Когда вы создаете поток, вызовите метод SetApartmentState() перед его запуском. Вы не можете сделать это для потоков пула.

Например:

Thread thread = new Thread(threadAction);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...