Элемент управления ActiveX не может быть создан, потому что поток находится в однопоточной квартире. Бывает после пробуждения ПК от сна

Я работаю над клиентом VOIP (форма окна), который открывает окно браузера (ExtendedWebBrowser) при совершении или получении вызова. Обычно это работает нормально, но если компьютер переводится в спящий режим, а затем просыпается, программа вылетает со следующей ошибкой:

"System.Threading.ThreadStateException crossed a native/managed boundary
  Message=ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment."

Я пытался установить темы, начатые в коде с thread.SetApartmentState(ApartmentState.STA) но я получаю тот же результат. Кроме того, у меня есть [STAThread] перед main() функция. Теперь мне интересно, имеет ли это отношение к тому, что поток не завершается правильно, когда компьютер переводится в спящий режим, но я не уверен. Я имею опыт работы с C++ и DirectX, это первая форма Windows, над которой я работал, поэтому любая помощь будет принята с благодарностью.

Продолжение: я смог решить эту проблему, обнаружив, что после возобновления программа запускалась в рабочем потоке вместо основного потока. Более подробную информацию можно прочитать здесь: Sleep (приостановить) и возобновление формы Windows запускает программу на рабочем потоке вместо основного потока

1 ответ

Решение

Я смог решить эту проблему. Когда программа вышла из спящего режима и run() было вызвано, что он запускался в рабочем потоке событий Windows вместо основного потока. Более подробную информацию можно прочитать здесь: Sleep (приостановить) и возобновление формы Windows запускает программу на рабочем потоке вместо основного потока

Другие вопросы по тегам