HOME >> Tips >> Microsoft.NET

デバッグ実行中に「CLR は、COM コンテキスト 0x1af66748 から COM コンテキスト 0x1af66870 へ 60 秒で移行できませんでした」エラーが発生する

2016/3/2
文書番号:20481



.NET アプリケーションをデバッグ実行中に時間がかかる処理があり、以下のエラーが発生しました。

===============================================================
ContextSwitchDeadlock が検出されました。

Message: CLR は、COM コンテキスト 0x1af66748 から COM コンテキスト 0x1af66870 へ 60 秒で移行できませんでした。ターゲット コンテキストおよびアパートメントを所有するスレッドが、ポンプしない待機を行っているか、Windows のメッセージを表示しないで非常に長い実行操作を処理しているかのどちらかです。この状態は通常、パフォーマンスを低下させたり、アプリケーションが応答していない状態および増え続けるメモリ使用を導く可能性があります。この問題を回避するには、すべての Single Thread Apartment (STA) のスレッドが、CoWaitForMultipleHandles のようなポンプする待機プリミティブを使用するか、長い実行操作中に定期的にメッセージをポンプしなければなりません。 ===============================================================


クリックで拡大


これはデバッグ中にしか起こらないもののようですが、必要な"時間のかかる処理"の場合にはこのエラーが発生しても困るので出ないようにします。

【対応方法】

  1. Visual Studio のメニューバーから [デバッグ] - [例外] をクリックします。

    クリックで拡大

  2. 「Managed Debugging Assistants」を展開し、「ContextSwitchDeadlock」の項目のチェックを外します。
    画面右上の「OK」をクリックしてダイアログを閉じます。

    クリックで拡大

    これで上記エラーはスローされないようになります。