【发布时间】:2012-11-13 22:14:53
【问题描述】:
我有一个在套接字处理线程中运行的事件处理程序,它使用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 的代码中)并且堆栈跟踪在调用站点结束。我无法找出导致异常的原因。 (更糟糕的是,该调用大部分时间都适用于同一个参数,因此如果没有调试器的帮助,我无法预测和追踪它。)
在我进一步提取一个孤立的测试用例之前,这是委托驱动调用背后引发的异常的预期行为吗?
【问题讨论】:
-
注意:这是 Visual Basic 2008 Express Edition,它使用 .NET 3.5。
标签: .net vb.net exception-handling .net-3.5 invoke