微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

vb.net – 使用BackgroundWorker检查WebBrowser中是否存在元素

我正在使用后台工作程序使用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

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐