我正在开发一个VOIP客户端(Window窗体),当有电话呼入或接入时,它会打开一个浏览器窗口(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)
在代码中设置启动的线程,但是我得到了相同的结果。此外,在main()
函数之前,我确实有[STAThread]
。现在我在想,如果计算机休眠时线程没有正确终止是否更多是问题所在,但我不确定。我的背景是C ++和DirectX,这是我工作过的第一个Windows表单,所以任何帮助都将不胜感激。跟进:在发现程序恢复后是在工作线程而不是主线程上启动的后,我能够解决这个问题。更多信息可以在此处阅读:Sleep(suspend)和Resuming windows form starts program on worker thread instead of main thread