1

実行時に作成され、バックグラウンド スレッド経由で使用される Web ブラウザー コントロールがあります。以下は、使用されるコードの例です。

If Me.InvokeRequired Then Me.Invoke(Sub() webbroswers(3).Document.GetElementById("ID").InnerText = TextBox4.Text)

これはうまくいきます!ただし、Web ブラウザーに要素「ID」がない場合があります (たとえば)。だから、基本的にエラーが発生してもコードを続行できるようにする方法が欲しいです。try - catch ブロックを試しましたが、これはキャッチしません!

4

1 に答える 1

3

次のように、複数行のラムダ式を使用できます。

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 を実行する必要がある場合は、次のように、複数行のラムダ式で簡単に実行することもできます。

If Me.InvokeRequired Then Me.Invoke(
    Sub()
        Try
            webbroswers(3).Document.GetElementById("ID").InnerText = TextBox4.Text
        Catch ex As Exception
            ' ...
        End Try
    End Sub
    )

ただし、ラムダ式が長くなりすぎる場合、または例外でより意味のあるスタック トレースが必要な場合は、次のように実際のメソッドへのデリゲートを使用できます。

    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
于 2013-11-12T00:59:24.120 に答える