Stack Trace, GuideAlreadyVisibleException - PullRequest
       0

Stack Trace, GuideAlreadyVisibleException

0 голосов
/ 29 февраля 2012

Мое приложение уже опубликовано в App Hub.Но я получил сообщение об ошибке, в котором говорится, что произошел сбой, вызванный GuideAlreadyVisibleException.Я использовал руководство, чтобы показать пользовательские сообщения.Что это за исключение и когда оно вызвано?Я не могу воспроизвести сбой в устройстве.

Вот так я и использовал справочные сообщения

            if (pCycMan.GetStartDate() == pCycMan.GetDefaultDate())
            {
                Guide.BeginShowMessageBox(resMan.GetString("msgboxWelcomeStringHeader"), resMan.GetString("msgboxWelcomeStringDescription1") + "\n" + resMan.GetString("msgboxWelcomeStringDescription2"),
                    new string[] { resMan.GetString("msgBoxWelcomeOk"), resMan.GetString("appBarIconFAQText") }, 1, MessageBoxIcon.None, new AsyncCallback(OnMessageBoxClosed), null);
            }
            else if (pCycMan.GetCycleStartDelay() > 0)
            {
                if (pCycMan.IsCyclePaused())
                {
                    Guide.BeginShowMessageBox(resMan.GetString("msgboxCycleDelayPromptHeader"), resMan.GetString("msgboxCyclePausedPromptDescription") + "\n" + resMan.GetString("msgboxCycleDelayPromptDescription3"),
                        new string[] { resMan.GetString("msgBoxWelcomeOk"), resMan.GetString("appBarIconFAQText") }, 1, MessageBoxIcon.None, new AsyncCallback(OnMessageBoxClosed), null);
                }
                else
                {
                    String delayMsg = resMan.GetString("msgboxCycleDelayPromptDescription1") + " " + pCycMan.GetCycleStartDelay().ToString() + " " + resMan.GetString("msgboxCycleDelayPromptDescription2")+ "\n" + resMan.GetString("msgboxCycleDelayPromptDescription3") ;

                    Guide.BeginShowMessageBox(resMan.GetString("msgboxCycleDelayPromptHeader"), delayMsg,
                        new string[] { resMan.GetString("msgBoxWelcomeOk"), resMan.GetString("appBarIconFAQText") }, 1, MessageBoxIcon.None, new AsyncCallback(OnMessageBoxClosed), null);
                }
            }

И

        private void OnMessageBoxClosed(IAsyncResult msgboxresult)
    {
        int? buttonIndex = Guide.EndShowMessageBox(msgboxresult);
        switch (buttonIndex)
        {
            case 0:
                break;

            case 1:
                Deployment.Current.Dispatcher.BeginInvoke(() => NavigateToHelpPage());
                break;
        }
    }

1 Ответ

1 голос
/ 13 мая 2012

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

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

Я избегаю этой проблемы лично в некоторых приложениях, добавляя вызов вспомогательному методу, прежде чем показывать какие-либо подсказки. Я включил фрагмент, который выполняет функции, аналогичные моему вспомогательному методу. Я также добавляю проверку, чтобы избежать бесконечного цикла, позволяя ему работать только в течение 3 секунд, после этого я позволяю приложению аварийно завершить работу, если это необходимо (но, надеюсь, это не так).

public static void GuideSafetyWait(int maxDuration)
{
    DateTime timeStarted = DateTime.Now;
    while (Guide.IsVisible)
    {
        if ((DateTime.Now - timeStarted).TotalMilliseconds >= maxDuration) 
            break; // Prevent infinite loop.

        Thread.Sleep(10); // This could be any number of milliseconds, but 
                          // if its too high, it may deliver a poor user experience.   
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...