我正在使用后台工作线程来使用vb.net操纵WebBrowser上的一些元素。
例如,后台工作线程
这里发生的是,如果我刷我的RFID卡,它会将相应的值包含到我的浏览器中的
现在我想要的是,我想要检查容器本身(
参考资料: https://dev59.com/iUvSa4cB1Zd3GeqPcTDY#2022120 问题是,根据上面的代码,BackgroundWorker实际上并没有与UI交互。
有没有办法让我使用后台工作程序确定该元素是否存在?
我认为我已经做到了,但似乎不起作用。
例如,后台工作线程
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
)是否存在(因为它是一个弹出窗口)。请参考图像。
这是我们的代码。
If Me.TerminalBrowser.Document.GetElementById("synchronize-rfid") IsNot Nothing Then
' Code here
end if
参考资料: https://dev59.com/iUvSa4cB1Zd3GeqPcTDY#2022120 问题是,根据上面的代码,BackgroundWorker实际上并没有与UI交互。
有没有办法让我使用后台工作程序确定该元素是否存在?
我认为我已经做到了,但似乎不起作用。
Dim synchronize_rfid = Me.Invoke(Sub() Me.TerminalBrowser.Document.GetElementById("synchronize-rfid"))
If synchronize_rfid IsNot Nothing Then
' Code here
end if
synchronize_rfid
是否存在。我尝试在if语句内发送消息框,但它并没有进入其中。 - Wesley Brian LachenalMe.Invoke(Sub() Me.TerminalBrowser.Document.GetElementById("synchronize-rfid"))
总是返回一个空值,因为子程序不返回任何值。假设TerminalBrowser是正确的引用,那么您需要在Me.Invoke
语句中使用lambda函数而不是lambda方法。我之所以说“TerminalBrowser是正确的引用”,是因为您指示该元素位于弹出窗口中,这可能是不同的浏览器实例。 - TnTinMn