Я работаю над клиентом 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 (suspend ) и возобновление формы окна запускает программу в рабочем потоке, а не в основном потоке