如何从代码中关闭Guide.Begin ShowMessageBox

时间:2011-10-20 21:32:12

标签: windows-phone-7

我正在Windows Phone 7上运行异步Web请求,我希望用户能够在需要太长时间时取消请求。我通过调用

来显示一个消息框
IAsyncResult result = Guide.BeginShowMessageBox("Synchronize", "Synchronizing with MyWebsite.com...", new string[] { "Cancel" }, 0, MessageBoxIcon.None, OnEndDialog, null);

在OnEndDialog回调中,我可以取消请求,这可以正常工作。

但是当请求完成后,我想从我的代码中关闭消息框。不幸的是,当我打电话时

Guide.EndShowMessageBox(result);

从我的代码(是的,我使用dispatcher.BeginInvoke在UI线程上运行调用),结果是一个阻塞调用,对话框仍在等待用户按下取消按钮。

有没有办法从代码中关闭消息框?

1 个答案:

答案 0 :(得分:0)

我想无法从代码中关闭“指南”消息框。

我使用Coding4Fun Windows Phone Toolkit中的MessagePrompt控件解决了这个问题。您可以调用OnCompleted(...)来关闭消息框。

我在基类(UserPrompt)中添加了一个Dismiss方法,可以从后台线程调用:

    public void Dismiss(PopUpResult result)
    {
        // Dismiss can be called from any thread. Make sure to execute on UI thread:
        Dispatcher dispatcher = Deployment.Current.Dispatcher;
        if (dispatcher.CheckAccess())
        {
            OnCompleted(new PopUpEventArgs<string, PopUpResult> { PopUpResult = result });
        }
        else
        {
            dispatcher.BeginInvoke((Action)(() => { Dismiss(result); }));
        }
    }