2011-07-21 39 views
0

我正在尝试更新异步回调中的VB.Net 4.0中的依赖属性。我觉得我正确地做了这件事,但我仍然得到“调用线程无法访问此对象,因为不同的线程拥有它。”错误。有人看到在VB.Net 4.0中使用委托的更好方法吗?访问UI线程以更改WPF中的依赖属性

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 

每当得到的ErrorMessage设置DisplayError内异常得到投掷,即使我使用的调度员打电话DisplayError。

如果有人看到我尝试从异步回调访问Dependancy Properties的方式有任何问题,我真的很感激反馈。

感谢您的帮助!

哦,我很新在博客上的代码的问题。如何更好地制定这个问题的任何建议,将受到欢迎,以及。

回答

0

的问题可能是在调用Me...您已经访问被另一个线程拥有的对象,尝试存储到调度员参考事先或者可能使用Application.Current.Dispatcher

0

由于您没有指出违规行,所以我怀疑这里的问题是您在delError行(“发生错误”)中调用委托,而不是等到调度程序。考虑更改CallFuncCompeted实施

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