有时当我从后台线程调用RaiseEvent CanExecuteChanged(sender, EventArgs.Empty)
时,它会给我一个异常,说明“调用线程无法访问此对象,因为不同的线程拥有它。”
但是,如果我呼叫System.Windows.Threading.Dispatcher.CurrentDispatcher.CheckAccess
则返回True。
我做错了什么?
Private Sub m_Parent_PropertyChanged(ByVal sender As Object, ByVal e As PropertyChangedEventArgs) Handles m_Parent.PropertyChanged
If System.Windows.Threading.Dispatcher.CurrentDispatcher.CheckAccess Then
RaiseEvent CanExecuteChanged(sender, EventArgs.Empty)
Else
End If
End Sub
答案 0 :(得分:2)
System.Windows.Threading.Dispatcher.CurrentDispatcher.CheckAccess
将始终返回true,因为线程始终可以访问与其关联的Dispatcher。问题是您正在使用后台线程的调度程序而不是正在运行UI的主线程。
如果您需要引发CanExecuteChanged
,可以保存对主线程调度程序的引用并使用其Invoke
方法。
答案 1 :(得分:2)
Application.Current.Dispatcher.CheckAccess()