Элемент управления 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 запускает программу на рабочем потоке вместо основного потока