我有这个程序(从C#转换):
Private Sub _biometrics_IdentifyFailed(ByVal sender As Object, ByVal e As AuthenticationFailedEventArgs)
' See comment above...
Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, New Action(Function()
StatusTextBox.Text = "Failed"
UsernameTextBox.Text = [String].Empty
_session.Close()
_session = _biometrics.OpenSession()
End Function))
End Sub
我在'Dispatcher.BegingInvoke'中遇到错误,说“对非共享成员的引用需要对象引用”。
我似乎无法弄清楚这意味着什么或如何解决它。
有人能理解并帮我解决吗?
这是一个Windows窗体应用程序,VS 2010,.NET framework 4.0。
感谢。
答案 0 :(得分:1)
当前范围内没有Dispatcher属性。由于Dispatcher也是一种类型,因此编译器默认尝试调用Dispatcher类型上定义的 static BeginInvoke
方法。没有,只有一个实例方法,这就是异常所说的内容。
您正在做什么是您正在将WPF代码段复制到Windows窗体应用程序中。 Dispatcher 用于WPF应用程序。这被称为" god tier"应用开发。你不是在这个更高的领域内编程。因为这可以被孩子们阅读,所以我不会描述使用VB.NET进行Windows Forms开发的内容。
您可能正在尝试从后台线程更新UI。在这种情况下,您将使用Control.BeginInvoke
从后台线程更新控件。你可能在控件的代码隐藏中,所以只需这样调用方法:
Private Sub _biometrics_IdentifyFailed(ByVal sender As Object, ByVal e As AuthenticationFailedEventArgs)
' See comment above...
BeginInvoke(New InvokeDelegate(AddressOf InvokeMethod))
_session.Close()
_session = _biometrics.OpenSession()
end Sub
Public Sub InvokeMethod()
StatusTextBox.Text = "Failed"
UsernameTextBox.Text = [String].Empty
End Sub
请注意_biometrics_IdentifyFailed
正在后台线程上执行,所以只有后台工作才会在那里进行。 InvokeMethod
将在UI线程上执行,因此只有UI更新才会发生。我不是VB,因此我可能会遇到一些语法错误。祝你好运。