On Windows Phone 8.1, how to programmatically dismiss a MessageDialog after the ShowAsync call?
I’ve tried calling IAsyncInfo.Close(), it just throws an InvalidOperationException "An illegal state change was requested".
I’ve tried calling IAsyncInfo.Cancel(). The dialog stays visible, the only result - after I tap the “Close” button, TaskCancelledException is marshaled to the awaiting routine.
Update: exact behavior depends on the sequence of the calls.
- If
IAsyncOperation.Cancel()
is invoked beforeawait theTask
- await keyword throws TaskCancelledException at once. However, the dialog stays visible. - If
await theTask;
is invoked beforeIAsyncOperation.Cancel()
, the dialog stays visible, but unlike #1,await
continues waiting for a button to be tapped. Only then a TaskCanceledException is raised.
BTW, my scenario is #2: I need to be able to close message dialogs after some routine is already waiting for its completion.
This is how it's done in RT. Save that ShowAsync Task and you can cancel that later.
Notice the ShowAsync() is not awaited. Instead is saved to a task which can be cancelled. Sadly I tried this on WP and it didn't work.