Wes*_*nal 5 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)是否存在(因为它是一个弹出窗口).见图片以供参考.
这是我们的代码.
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
尝试先声明变量,然后在调用期间设置它(这将从主线程设置它)。
lambdaSub()的行为类似于普通的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