我在运行时创建了一个webbrowser控件,并通过后台线程使用。以下是使用代码的示例:
If Me.InvokeRequired Then Me.Invoke(Sub() webbroswers(3).Document.GetElementById("ID").InnerText = TextBox4.Text)
这很棒!但有时webbrowser没有元素“ID”(例如)。所以我想要一种基本上允许代码在发生错误时继续的方法。我已经尝试过try-catch块但是这没有抓住它!
答案 0 :(得分:3)
您可以使用多行lambda表达式,如下所示:
If Me.InvokeRequired Then Me.Invoke(
Sub()
Dim element As HtmlElement = webbroswers(3).Document.GetElementById("ID")
If element IsNot Nothing Then
element.InnerText = TextBox4.Text
End If
End Sub
)
检查它是否Nothing
,就像让它失败并捕获异常一样。但是,如果由于任何其他原因需要执行Try / Catch,您也可以在多行lambda表达式中轻松完成,例如:
If Me.InvokeRequired Then Me.Invoke(
Sub()
Try
webbroswers(3).Document.GetElementById("ID").InnerText = TextBox4.Text
Catch ex As Exception
' ...
End Try
End Sub
)
但是,如果lambda表达式太长,或者您希望在异常中拥有更有意义的堆栈跟踪,则可以使用委托给实际方法,如下所示:
If Me.InvokeRequired Then Me.Invoke(AddressOf UpdateId)
'...
Private Sub UpdateId()
Try
webbroswers(3).Document.GetElementById("ID").InnerText = TextBox4.Text
Catch ex As Exception
' ...
End Try
End Sub