私はC++コードベース(これは変更できません)で機能を呼び出すためにCLRを使用するC#アプリケーションを持っています。C#でC++スレッドでハンドル例外が発生しました
私のC#アプリはC++のものを初期化し、定期的にそれとやりとりします。
C++のものが初期化されると、スレッドが生成され、スレッドはアプリケーションの存続期間中実行されます。
私のコントロールを超えて、C++のものが例外を発生させる原因となる条件があります。これが私のアプリケーションをクラッシュさせています。私は、クラッシュの原因は私のアプリが何かによって開始されていないことを強調しなければならない**。
私はAppDomain.CurrentDomain.UnhandledExceptionルートを試しましたが、例外をキャッチしません。
アイデア?
**簡単に言えば、C++のスタッフがDirect3Dを起動します。デバイスが失われた場合、例外が発生します。これを引き起こす原因はいくつかありますが、ユーザーがPCをロックしている場合(Windows)などの良い例があります。
この種のグルーロジックをしてください。それが基になるC++コードを呼び出し、管理されていない例外をキャッチして、それらを処理するか、またはマネージ例外として渡します。 – Rook
処理されていない例外のためにC++スレッドが終了し、その上に管理スタックフレームがない場合、C++の問題は純粋です。そのスレッドと何らかの方法で対話できない場合、デフォルトのCRTアクションが呼び出され、アプリを終了します。このエラーを処理することができたとしても、部分的に作成されたC++オブジェクトに対処する必要があります。静的なものがあれば、適切に再初期化する方法はありません。ライブラリがそのようなことを処理する手段を提供していない場合、例えば、エラーを登録して、再起動が必要なハンドラを再試行してください。 –
ありがとう@AloisKraus - 私は単純にCLRオブジェクトをインスタンス化して初期化できるので、エラーを処理することはできます。 – grae22