2011-07-21 37 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")