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/

Другие вопросы по тегам