WiX записывает пользовательский BA — как приостановить процесс при срабатывании команды «Отмена»?

Используя пользовательское управляемое приложение начальной загрузки, я не могу остановить процесс установки при нажатии кнопки отмены. Я открываю окно подтверждения с вариантами «Да/Нет». Как только отмена была подтверждена, установка откатывается нормально. Или, в случае отказа, продолжается. Это было сделано в соответствии с: Отмена установки и откат с помощью wix burn Пользовательский интерфейс начальной загрузки

Я заметил, что та же проблема возникает и в самом комплекте установки WiX, где вы можете нажать «Отмена» и подождать, и установка, вместо того, чтобы ждать, пока пользователь подтвердит или отклонит отмену, продолжится.

Итак, мой вопрос: как мне приостановить прогресс, пока команда «Отмена» не будет подтверждена (или отклонена) в окне подтверждения?

Обновление: я пытаюсь сделать это с помощью следующего механизма: добавить новое свойство с именем CancelWaiting. Если CancelWaiting истинно, то в ProgressViewModel измените логику таким образом, чтобы <PropertyChangedEventArgs>.Result было установлено на Result.Suspend. Задача здесь состоит в том, чтобы выполнить привязку нескольких команд. Другой способ — объединить пути Cancel и CancelWaiting в один. В любом случае, я обновлю эту тему, как только я это сделаю. Если у кого-то есть другие идеи, пишите.


person Manas    schedule 27.04.2013    source источник
comment
В соответствии с предложением Роба, я закончил тем, что показал представление подтверждения отмены из метода обратного вызова прогресса.   -  person Manas    schedule 30.04.2013


Ответы (2)


Возврат Result.Suspend даст указание движку Burn остановить установку как можно скорее и оставить Bundle зарегистрированным для повторного выполнения. Это вряд ли то, что вы хотите сделать.

Если вы хотите, чтобы прогресс не продолжался, у вас должен быть метод обратного вызова прогресса wait и не возвращаться. Вы можете сделать это, отобразив окно сообщения из метода обратного вызова прогресса, или заставить обратный вызов прогресса ожидать события и сигнализировать о событии после того, как пользователь сделает выбор в потоке пользовательского интерфейса.

person Rob Mensching    schedule 27.04.2013

Я знаю, что это старо, но мой подход может помочь кому-то еще бороться. Я столкнулся с той же проблемой, когда мне пришлось приостановить процесс установки/удаления пользовательского приложения wpf для записи. Итак, вот как я решил эту проблему: я создал всплывающее модальное окно с помощью Window.ShowDialog(), потому что поток графического интерфейса пользователя будет блокироваться до тех пор, пока всплывающее окно не будет закрыто.

Когда пользователь нажимает выход/отмена, вы можете сделать что-то вроде этого:

ModalWindow newWindow = new ModalWindow();
newWindow.ShowDialog();

Вы можете добавить новое окно и вызвать его таким образом. Это приостановит поток пользовательского интерфейса, пока пользователь не закроет или не даст отзыв ModalWindow.

Но если вы ищете другой подход, вот хорошее чтение http://deanchalk.com/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/

person Rukshan Dangalla    schedule 29.04.2017