Я использую WPF и DelegateCommand
из PRISM и имеют следующую проблему:RaiseCanExecuteChanged вызывается, когда ждут причины тупиковой
Я начала операции асинхронной как:
public async void ProgramDevice()
{
var result = await FirmwareLoader.DownloadFirmwareAsync();
}
В этом методе событие обжигают, который я зарегистрирован и должен обновить мой DelegateCommand
, поэтому он не может быть выполнена:
//UiCommand is of type DelegateCommand
Engine.IsProgrammedChanged +=
(s, e) => Dispatcher.Invoke(() => UiCommand.RaiseCanExecuteChanged());
Теперь у меня есть проблема, что RaiseCanExecuteChanged
вызывает тупик (я проверил, и Dispatcher.Invoke
не вызывает его, потому что когда я, например, покажите MessageBox, но он отлично работает).
Я делаю что-то неправильно или как я могу обойти эту проблему?
Что делает ваш поток пользовательского интерфейса (т. Е. Какой стек вызовов), когда происходит тупик? – svick
@svick: метод 'ProgramDevice' ожидает ожидаемого« ожидания », и обработчик события входит в' Invoke' и зависает в 'RaiseCanExecuteChanged'. Стек вызовов кажется прекрасным (DownloadFirmwareAsync -> OnIsProgrammedChanged -> AnonymousMethod) ... – ChrFin
@chrfin: Пожалуйста, разместите весь стек вызовов. –