ピクチャーボックスに基づくユーザーコントロールで例外がスローされ、一般的なエラー画像(赤いX)が表示されます。GUIスレッドが例外自体をキャッチして処理したため、例外が発生した場所を簡単に見つけてデバッグすることはできません。
現在、OnPaintコード全体をtry-catchでラップしており、コードをデバッグできましたが、非常に面倒であることがわかったため、GUIスレッドの例外からデバッガーに侵入する方法があるかどうか疑問に思いました。
ピクチャーボックスに基づくユーザーコントロールで例外がスローされ、一般的なエラー画像(赤いX)が表示されます。GUIスレッドが例外自体をキャッチして処理したため、例外が発生した場所を簡単に見つけてデバッグすることはできません。
現在、OnPaintコード全体をtry-catchでラップしており、コードをデバッグできましたが、非常に面倒であることがわかったため、GUIスレッドの例外からデバッガーに侵入する方法があるかどうか疑問に思いました。
デフォルトではすでにこのように機能します。UIスレッドの例外処理メソッドは、Application.SetUnhandledExceptionMode()によって制御されます。デフォルトはUnhandledExceptionMode.CatchExceptionであるため、ThreadExceptionイベントが発生し、デフォルトでThreadExceptionDialogが作成されます。
ただし、デバッガーが接続されている場合は、このモードがオーバーライドされます。そのため、アクティブなcatch句がない場合、例外は常に処理されません。デバッガーが停止し、問題を診断できるようにします。独自のtry/catchを作成することで、これが機能しないようにします。
OnPaint()は、特にPictureBoxの場合、特別なものになる可能性があることに注意してください。try / catch句があり、未処理の例外をキャッチして赤十字を描画します。これは少し珍しいですが、ImageLocationプロパティをサポートしているため必要です。これにより、信頼できない可能性のあるネットワークソースからの画像を表示できます。その場合に例外をトラブルシューティングする最良の方法は、[デバッグ] + [例外]を使用して、[スロー]チェックボックスをオンにすることです。これにより、デバッガーは、処理されていない場合でも、例外で常に停止します。