3

我正在开发一个 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) 和 Resuming windows form 在工作线程而不是主线程上启动程序

4

1 回答 1

3

我能够解决这个问题。当程序从睡眠模式恢复run()并被调用时,它正在 Windows 事件工作线程而不是主线程上运行。可以在此处阅读更多信息:Sleep(suspend) 和 Resuming windows form 在工作线程而不是主线程上启动程序

于 2012-05-17T16:58:58.237 回答