使用BackgroundWorker检查WebBrowser中是否存在元素

时间:2016-02-12 03:18:09

标签: vb.net backgroundworker

我使用后台工作程序使用vb.net操作WebBrowser上的一些元素。

例如,后台工作人员RFIDReader会检查我是否在特定链接上。

ElseIf TerminalBrowser.Url.ToString.Contains(baseUrl + "box-office/ticket-verification") And rf_code <> "" Then

    ' Insert RF Code in "rf_code" hidden text field
    Me.Invoke(Sub() Me.TerminalBrowser.Document.GetElementById("rf_code").SetAttribute("value", rf_code.ToLower))

End If  

如果我点击我的RFID卡,这里会发生什么。它将在浏览器中包含我rf_code元素的相应值。

现在我想要发生的是,我想检查容器本身(synchronize-rfid)是否确实存在(因为它是一个弹出窗口)。见图片以供参考。

enter image description here

这是我们的代码。

If Me.TerminalBrowser.Document.GetElementById("synchronize-rfid") IsNot Nothing Then
    ' Code here
end if

参考:https://stackoverflow.com/a/2022120/1699388

问题是,BackgroundWorker并没有按照上面的代码与UI进行真正的交互。

我是否有任何方法可以确定该元素是否存在于后台工作者?

我认为我已经完成了这项工作,但它不起作用。

Dim synchronize_rfid = Me.Invoke(Sub() Me.TerminalBrowser.Document.GetElementById("synchronize-rfid"))
If synchronize_rfid IsNot Nothing Then
    ' Code here
end if

1 个答案:

答案 0 :(得分:2)

首先尝试声明变量,然后在调用期间设置它(将从主线程设置它)。

Sub() lambda的行为类似于普通Sub() - End Sub方法,这意味着您可以在其中执行相同的操作,就像使用单独的方法一样。

这对我有用:

Dim synchronize_rfid As HtmlElement
If Me.InvokeRequired = True Then
    Me.Invoke(Sub() synchronize_rfid = Me.TerminalBrowser.Document.GetElementById("synchronize-rfid"))
Else
    synchronize_rfid = Me.TerminalBrowser.Document.GetElementById("synchronize-rfid")
End If

If synchronize_rfid IsNot Nothing Then
    ' Code here
End If