(C#)「ContextSwitchDeadlock が発生しました。」の対処方法

Pocket
LinkedIn にシェア
LINEで送る
Facebook にシェア

デバッグ実行時に「ContextSwitchDeadlock が発生しました。」のエラーが発生することへの対処方法です。

事象

デバッグ実行中に以下のエラーが発生する。

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

対処方法

エラーウィンドウが表示された場合は「例外設定を開く」を押下します。
ContextSwitchDeadlock01

例外設定の中の[Managed Debugging Assistants]-[ContextSwitchDeadlock]のチェックを外します。
ContextSwitchDeadlock02

これでエラーは発生しなくなりますが、よろしくないコーディングになっている可能性が高いのでコーディングも見直すことをお勧めします。