WiX Burn Custom BA - как приостановить прогресс, когда запускается команда Отмена?
При использовании настраиваемого управляемого приложения начальной загрузки я не могу остановить выполнение установки при нажатии кнопки отмены. Я открываю окно подтверждения с опциями Да / Нет. Как только отмена была подтверждена, установка откатывается просто отлично. Или, если отклонено, это продолжается. Это было сделано в соответствии с: Отмена установки и откат с помощью wix burn Bootstrapper UI
Я заметил, что та же проблема возникает и в самом наборе настроек WiX, где вы можете нажать "Отмена" и "Ждать", и установка, вместо ожидания подтверждения или отклонения пользователем, продолжается.
Итак, мой вопрос: как мне приостановить выполнение, пока команда Отмена не будет подтверждена (или отклонена) в представлении подтверждения?
Обновление: я пытаюсь сделать это с помощью следующего механизма: Добавить новое свойство с именем CancelWaiting
, Если CancelWaiting
истинно, то в ProgressViewModel измените логику так, чтобы <PropertyChangedEventArgs>.Result
установлен в Result.Suspend
, Задача здесь состоит в том, чтобы сделать связывание нескольких команд. Другой способ - объединить пути Cancel и CancelWaiting в один. В любом случае, я обновлю эту ветку, как только начну. Если у кого-то есть другие идеи, пишите.
2 ответа
Возврате Result.Suspend
даст команду двигателю Burn прекратить установку как можно скорее и сохранить зарегистрированный комплект для повторного запуска. Это маловероятно, что вы хотите сделать.
Если вы хотите не допустить продолжения процесса, необходимо, чтобы метод обратного вызова Progress ожидал, а не возвращался. Вы можете сделать это, показав окно сообщения из метода обратного вызова progress, или сделать так, чтобы обратный вызов progress ожидал событие и сигнализировал о событии после того, как пользователь сделал выбор в потоке пользовательского интерфейса.
Я знаю, что это старо, но мой подход может помочь кому-то еще бороться. Я столкнулся с той же проблемой, когда мне пришлось приостановить процесс установки / удаления пользовательского приложения Burn wpf. Вот как я решил это: я создал всплывающее модальное окно с помощью Window.ShowDialog(), потому что поток графического интерфейса будет блокироваться, пока всплывающее окно не будет закрыто.
Когда пользователь нажимает выход / отмена, вы можете сделать что-то вроде этого:
ModalWindow newWindow = new ModalWindow();
newWindow.ShowDialog();
Вы можете добавить новое окно и вызвать его таким образом. Это приостановит поток пользовательского интерфейса до тех пор, пока пользователь не закроется или не отзовется с ModalWindow.
Но если вы ищете другой подход, вот хорошее прочтение http://deanchalk.com/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/