Как закрыть Guide.BeginShowMessageBox из кода - PullRequest
1 голос
/ 21 октября 2011

Я выполняю асинхронный веб-запрос на Windows Phone 7 и хочу, чтобы пользователь мог отменить запрос, если он занимает слишком много времени.Я показываю окно сообщения, вызывая:

IAsyncResult result = Guide.BeginShowMessageBox("Synchronize", "Synchronizing with MyWebsite.com...", new string[] { "Cancel" }, 0, MessageBoxIcon.None, OnEndDialog, null);

В обратном вызове OnEndDialog я могу отменить запрос, который работает нормально.

Но когда запрос завершен, я хочу закрыть окно сообщенияиз моего кода.К сожалению, когда я вызываю

Guide.EndShowMessageBox(result);

из своего кода (да, я использую dispatcher.BeginInvoke для запуска вызова в потоке пользовательского интерфейса), это оказывается блокирующим вызовом, и диалог все еще ждетпользователю нажать кнопку Отмена.

Есть ли способ закрыть окно сообщения из кода?

1 Ответ

0 голосов
/ 24 октября 2011

Я думаю, что невозможно закрыть окно сообщения Guide с кодом.

Я решил проблему с помощью элемента управления MessagePrompt из Coding4Fun Windows Phone Toolkit . Вы можете вызвать OnCompleted (...), чтобы закрыть окно сообщения.

Я добавил метод Dismiss в базовый класс (UserPrompt), который можно вызывать из фонового потока:

    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); }));
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...