WPF: проблемы с CurrentDispatcher.CheckAccess и CanExecuteChanged - PullRequest
1 голос
/ 09 октября 2010

Иногда, когда я вызываю RaiseEvent CanExecuteChanged(sender, EventArgs.Empty) из фонового потока, это выдает мне исключение о том, что "вызывающий поток не может получить доступ к этому объекту, потому что другой поток владеет им."* возвращает 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

Ответы [ 2 ]

2 голосов
/ 11 сентября 2012
2 голосов
/ 23 ноября 2010

System.Windows.Threading.Dispatcher.CurrentDispatcher.CheckAccess всегда будет возвращать true, поскольку поток всегда имеет доступ к связанному с ним диспетчеру.Проблема в том, что вы используете диспетчер фонового потока , а не основного потока, в котором работает пользовательский интерфейс.

Если вам нужно повысить CanExecuteChanged, вы можете сохранить ссылку на диспетчер основного потока и использовать его метод Invoke.

...