我有一个在套接字处理线程中运行的事件处理程序,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
套接字线程中调用的代码中)并且堆栈跟踪在调用站点结束。我无法找出导致异常的原因。(更糟糕的是,该调用大部分时间都适用于相同的参数,因此如果没有调试器的帮助,我无法预测和追踪它。)
在我进一步提取一个孤立的测试用例之前,这是委托驱动调用背后引发的异常的预期行为吗?