2011-05-13 10 views
0

C#コードはC++ dllからプロパティ値を取得し、dllが値を返すまでこの取得をブロックします。デバッグモードでは、取得に時間がかかる場合、MDAはContextDeadlockSwitchをスローします。実行時にContextDeadlockSwitchを検出します

実行時にContextDeadlockSwitchを捕まえることはできないと思いますが、MDAに似たメカニズムがC#がこのデッドロックを検出するために捕まえることができる同様の例外をスローする方法がありますか?

理由は、数秒待つのを続けるか、強制的にアプリを強制終了して再起動するようにC#コードプロンプトをユーザに促すことです。

答えて

1

ManualResetEventでタイムアウトを待って、完了を知らせるために、別のスレッドでC++ dllを呼び出すことができます。タイムアウトに達すると、ユーザーに続行するかどうか尋ねることができます。 DLLのCOMオブジェクトがSTA内にある場合は、ランタイムに外出するときにGUIスレッドをフリーズさせないために、そのオブジェクトをマーシャリングするために予約されたアパートメントにオブジェクトを作成する必要があります。

関連する問題