2011年9月1日木曜日

[C#]ContextSwitchDeadlockのエラーがでる

C#でいわゆる外部のCOMを参照したプログラムをVisual Studioでコンパイル、デバッグ実行させたときに、
ContextSwitchDeadlockが発生しました
みたいなエラーが出て、動作が一時中断するケースが発生。なにやら 意味不明なメッセージも書かれているわけだが「続行」ボタンを押すと、動作は通常継続される。これは一体なんなのかというと、何かCOMを参照するようなプログラムにおいて、
  • COMに対する操作がしばらく(1分くらい?)ない場合にデッドロックの可能性をデバッガが指摘してくれている
らしい(MSDN参照)。というわけで、必ずしもプログラムに問題があるわけではないので気にしなくてもいと思われる(ここは要注意)。試してはいないが、DebugではなくてReleaseモードで実行すれば問題ないであろう。

もし、Debugモードでこのエラーをとりあえず回避したいという場合は、
  • [デバッグ] → [例外]→[Managed Debuggin Assistants] → [ContextSwitchDeadlock]のチェックを外す
ことで検知しなくなる。ただ、本当にデッドロックが発生していないのかは注意が必要。


0 件のコメント:

コメントを投稿