Reputation: 541
Using a custom managed bootstrapper application, I am unable to get the setup progress to stop when the cancel button is clicked. I pull up a confirmation view with Yes/No options. Once cancellation has been confirmed, the setup rolls back just fine. Or, if declined, it continues along. This was done in accordance with: Cancel Installation and Rollback using wix burn Bootstrapper UI
I noticed same problem also occurs in the WiX setup kit itself, where you could click cancel and wait, and the setup instead of waiting for user to confirm or decline cancellation, continues along.
So, my question is, how do I pause the progress, until the Cancel command is confirmed (or declined) in the confirmation view?
Update: I am attempting to do this by the following mechanism:
Add a new property called CancelWaiting
. If CancelWaiting
is true, then in the ProgressViewModel, change the logic such that the <PropertyChangedEventArgs>.Result
is set to Result.Suspend
. The challenge here is to do multiple command binding. The other way would be to combine the Cancel and CancelWaiting paths into one. Anyway, I'll update this thread once I get this going. If anyone has any other ideas, please do post.
Upvotes: 3
Views: 1933
Reputation: 2590
I know this is old, but my approach may help someone else struggling. I faced the same issue where I had to pause the progress of the installation/uninstallation of custom burn wpf app. So this is how I solved it: I created a popup a modal window via Window.ShowDialog(), because the gui thread will block until the popup is closed.
When user press exit/cancel you can do something like this:
ModalWindow newWindow = new ModalWindow();
newWindow.ShowDialog();
You can add new Window and call it in this way. That will pause the UI thread till user close or give feedback to ModalWindow.
But if you are looking for other approach, here is a good read http://deanchalk.com/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/
Upvotes: 0
Reputation: 35901
Returning Result.Suspend
will instruct the Burn engine to stop the installation as soon as possible and keep the Bundle registered to execute again. That is not likely what you want to do.
If you want to prevent the progress from continuing, then you must have the progress callback method wait and not return. You can either do that by showing the message box from the progress callback method or have the progress callback wait on an event and signal the event after the user makes a choice on the UI thread.
Upvotes: 3