3

私は、通話の発着信時にブラウザー ウィンドウ (ExtendedWebBrowser) を開く VOIP クライアント (ウィンドウのフォーム) に取り組んでいます。通常は正常に動作しますが、コンピューターがスリープ モードになってから復帰すると、プログラムは次のエラーでクラッシュします。

"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 フォームなので、助けていただければ幸いです。

フォローアップ:プログラムを再開した後、メイン スレッドではなくワーカー スレッドで開始されていることを発見した後、この問題を解決することができました。詳細については、こちらを参照してください:スリープ (サスペンド) および Windows フォームの再開は、メイン スレッドではなくワーカー スレッドでプログラムを開始します。

4

1 に答える 1

3

この問題を解決できました。プログラムがスリープ モードから再開され、run()呼び出されたとき、プログラムはメイン スレッドではなく Windows イベント ワーカー スレッドで実行されていました。詳細については、こちらを参照してください:スリープ (サスペンド) および Windows フォームの再開は、メイン スレッドではなくワーカー スレッドでプログラムを開始します。

于 2012-05-17T16:58:58.237 に答える