Invoke
UI 状態の更新に使用するソケット処理スレッドで実行されるイベント ハンドラーがあります。
コール スタックのさらに上のどこかにランナウェイがあり、FormatException
それをキャッチして分析しようとしていますが、UI スレッドでデバッガーを中断させることができないことがわかりました — 呼び出しまで例外がバブルしているようです私が何をしてもスレッド。
Private Delegate Sub newDataDelegate(ByVal data As String)
Private Sub onNewData(ByVal data As String) Handles _server.clientHasData
If Me.InvokeRequired Then
Me.Invoke(New newDataDelegate(AddressOf onNewData), data)
Exit Sub
End If
Try
updateGuiWith(data)
Catch ex As FormatException
System.Diagnostics.Debugger.Break()
End Try
End Sub
スタック トレース:
at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) at <X>.MainForm.onNewData(String data) in <X>.vb:line 377 at <X>.Server.onProbeData(String data) in <X>:line 104
( <X>
= 編集済み)
その結果、デバッガーは (onNewData
ソケット スレッドで呼び出されたコードで) 呼び出しスタックを下に分割し、呼び出しサイトでスタック トレースが終了します。例外の原因がわかりません。(さらに悪いことに、呼び出しはほとんどの場合同じ引数に対して機能するため、デバッガーの助けなしに予測して追跡することはできません。)
分離されたテストケースをさらに抽出する前に、デリゲート駆動の呼び出しの背後で発生した例外に対して、これは予想される動作ですか?