在Windows Phone 8.1上,如何在ShowAsync调用后以编程方式关闭MessageDialog?
我试过调用IAsyncInfo.Close(),它只抛出一个InvalidOperationException“请求非法状态更改”。
我试过调用IAsyncInfo.Cancel()。对话框保持可见,唯一的结果 - 在我点击“关闭”按钮后,TaskCancelledException被封送到等待例程。
更新:确切行为取决于通话顺序。
IAsyncOperation.Cancel()
之前调用await theTask
- await关键字立即抛出TaskCancelledException。但是,对话框保持可见。await theTask;
之前调用IAsyncOperation.Cancel()
,则对话框保持可见,但与#1不同,await
会继续等待按下按钮。只有这样才会引发TaskCanceledException。 答案 0 :(得分:1)
这是在RT中完成的。 保存该ShowAsync任务,您可以稍后取消。
private IAsyncOperation<IUICommand> dialogTask;
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageDialog dlg = new MessageDialog("This will close after 5 seconds");
try
{
dialogTask = dlg.ShowAsync();
}
catch (TaskCanceledException)
{
//this was cancelled
}
DispatcherTimer dt = new DispatcherTimer();
dt.Interval = TimeSpan.FromSeconds(5);
dt.Tick += dt_Tick;
dt.Start();
}
void dt_Tick(object sender, object e)
{
(sender as DispatcherTimer).Stop();
dialogTask.Cancel();
}
请注意,不等待ShowAsync()。而是保存到可以取消的任务。 可悲的是,我在WP上尝试过这个并没有用。