Я работаю над клиентом VOIP (форма окна), который открывает окно браузера (ExtendedWebBrowser) при вызове или получении вызова. Обычно он работает нормально, но если компьютер помещается в спящий режим, а затем разбудили программа будет врезаться со следующей ошибкой:Элемент управления ActiveX не может быть создан, потому что поток находится в однопоточной квартире. Случается после пробуждения ПК от сна
"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(suspend) and Resuming windows form starts program on worker thread instead of main thread
Это обычно вызвано проблемой с запуском вашей программы. Удалите любой пользовательский заставку, которую вы создали, и убедитесь, что первое созданное окно инициализируется в основном потоке. Это гарантирует, что класс SystemEvents будет правильно инициализирован. –
Привет, Ханс, благодарю вас за ответ. Первое созданное окно инициализируется в основном потоке. Тем не менее, первая/основная форма не та, что ошибки. Окно браузера, которое открывается основной формой, является тем, которое дает мне ошибку. Кроме того, я считаю важным отметить, что ошибка происходит только после того, как компьютер переведен в спящий режим, а затем разбужен. OnPowerChange формы закрываются и при возобновлении формы запускаются снова, как и при начальной загрузке. – madeFromCode
Ну, неясно, но браузер наверняка создаст такую ошибку. Обратите внимание, что название вопроса неправильное, оно жалуется, потому что это ** не создается ** в потоке STA. Не знаю, что такое OnPowerChange, но может показаться, что любое событие, которое вы используете, работает на неправильном потоке и, таким образом, вызывает жалобу. –