使用 BackgroundWorker 检查 WebBrowser 中是否存在元素
Check if element does exist in WebBrowser using BackgroundWorker
我正在使用后台工作程序通过 vb.net 操作我的 WebBrowser 上的一些元素。
例如,后台工作人员 RFIDReader
将检查我是否在特定的 link。
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
) 是否确实存在(因为它是一个弹出窗口)。请参阅图片以供参考。
这是我们的代码。
If Me.TerminalBrowser.Document.GetElementById("synchronize-rfid") IsNot Nothing Then
' Code here
end if
参考:
问题是,BackgroundWorker 并没有真正按照上面的代码与 UI 交互。
有什么方法可以让我使用后台工作程序确定该元素是否存在?
我想我已经这样做了,但它不起作用。
Dim synchronize_rfid = Me.Invoke(Sub() Me.TerminalBrowser.Document.GetElementById("synchronize-rfid"))
If synchronize_rfid IsNot Nothing Then
' Code here
end if
尝试先声明变量,然后在调用期间设置它(将从主线程设置它)。
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
我正在使用后台工作程序通过 vb.net 操作我的 WebBrowser 上的一些元素。
例如,后台工作人员 RFIDReader
将检查我是否在特定的 link。
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
) 是否确实存在(因为它是一个弹出窗口)。请参阅图片以供参考。
这是我们的代码。
If Me.TerminalBrowser.Document.GetElementById("synchronize-rfid") IsNot Nothing Then
' Code here
end if
参考:
问题是,BackgroundWorker 并没有真正按照上面的代码与 UI 交互。
有什么方法可以让我使用后台工作程序确定该元素是否存在?
我想我已经这样做了,但它不起作用。
Dim synchronize_rfid = Me.Invoke(Sub() Me.TerminalBrowser.Document.GetElementById("synchronize-rfid"))
If synchronize_rfid IsNot Nothing Then
' Code here
end if
尝试先声明变量,然后在调用期间设置它(将从主线程设置它)。
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