0

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

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

その理由は、C#コードでユーザーにプロンプ​​トを表示して、さらに数秒待つか、アプリを強制的に強制終了して再起動するようにするためです。

4

1 に答える 1

1

ManualResetEventでタイムアウト付きの待機を使用して完了を通知することにより、別のスレッドで C++ dll への呼び出しを実行できます。タイムアウトに達した場合は、続行するかどうかをユーザーに尋ねることができます。DLL の COM オブジェクトが STA にある場合、ランチに出かけたときに GUI スレッドがフリーズするのを防ぐために、そのオブジェクト用に予約されたアパートメントにオブジェクトを作成してマーシャリングする必要がある場合があることに注意してください。

于 2011-05-13T05:41:46.733 に答える