访问UI线程以更改WPF中的依赖性属性

访问UI线程以更改WPF中的依赖性属性,wpf,vb.net,thread-safety,dependency-properties,dispatcher,Wpf,Vb.net,Thread Safety,Dependency Properties,Dispatcher,我正在尝试在异步回调中更新VB.NET4.0中的Dependency属性。我觉得我这样做是正确的,但我仍然得到“调用线程无法访问此对象,因为另一个线程拥有它。”错误。有人认为在VB.NET4.0中使用委托的方法更好吗 Private WithEvents myObj as CallingObject Private Delegate Sub MyErrorDel(ByVal strError as string) Public Property ErrorMessage As String

我正在尝试在异步回调中更新VB.NET4.0中的Dependency属性。我觉得我这样做是正确的,但我仍然得到“调用线程无法访问此对象,因为另一个线程拥有它。”错误。有人认为在VB.NET4.0中使用委托的方法更好吗

Private WithEvents myObj as CallingObject
Private Delegate Sub MyErrorDel(ByVal strError as string)

Public Property ErrorMessage As String
    Get
       Return CStr(GetValue(ErrorMessageProperty))
    End Get
    Set(ByVal value As String)
        SetValue(ErrorMessageProperty, value)
    End Set
End Property

Private Sub MySub()
    myObj.CallFuncAsync()
End Sub

Private Sub DisplayError(ByVal strError as String)
    'Set Dependancy Property value Bound to UI Textbox
    ErrorMessage = strError
End Sub

Private Sub myObj_CallFuncCompleted(Byval sender as Object, ByVal e as CallFuncEventArgs)
    'Call delegate and pass in error string as argument
    Dim delError as MyErrorDel
    delError = New MyErrorDel(AddressOf DisplayError)
    delError("An error occured")
    Me.Dispatcher.Invoke(delError, System.Windows.Threading.DispatcherPriority.Normal, Nothing)
End Sub
无论何时在DisplayError内部设置ErrorMessage,都会引发异常,即使我正在使用dispatcher调用DisplayError

如果有人看到我试图从异步回调访问依赖性属性的方式有任何问题,我将非常感谢您的反馈

谢谢你的帮助


哦,我对写关于代码问题的博客很陌生。任何关于如何更好地表述这个问题的建议都将受到欢迎。

问题可能是在调用
Me…
时,您已经在访问另一个线程拥有的对象,尝试预先存储对调度程序的引用,或者可能使用
Application.Current.dispatcher

因为您没有指出有问题的行,我怀疑这里的问题是您在行delError(“发生错误”)中调用您的委托,而不是等到到达调度程序。考虑将调用函数的实现更改为

Me.Dispatcher.Invoke(AddressOf DisplayError, "An error occureed")