2016-07-07 9 views
0

Во-первых код, который выполняется без ошибок, но не покрывает все, что мне нужно это:HALT Кодекса, но не применение

public async Task SaveData() 
{ 
    // MessageDialog restartMessage; 
    // ^^ This was made global and is defined in SafeToSave() 

    // Check if it's safe to save 
    await SafeToSave(); 
    if (restartMessage != null) 
    { 
     CoreDispatcher cD = Window.Current.CoreWindow.Dispatcher; 
     await cD.RunAsync(CoreDispatcherPriority.Normal, async() => 
     { 
      await restartMessage.ShowAsync(); 
      // This WILL invoke 'Application.Current.Exit()' 
     }); 

     return; 
     // Issue is right around here... 
    } 

    // Other code... 

} 

Основная предпосылка заключается в том, что если это не безопасно, чтобы сохранить , диалоговое окно с сообщением сообщит пользователю, что приложение нужно перезапустить, а затем выполнить «Application.Current.Exit()», когда они затем нажмут кнопку «Okay».

Моя проблема в том, что мне нужен мой код, чтобы остановить выполнение, когда этот перезапуск ударил. Прямо сейчас 'return' только заканчивает этот метод, но после этого он будет продолжать делать другие вещи в методе, который называется SaveData(), пока мой эффект restartMessage не вступит в силу, и это не хорошо.

Я рассмотрел вопрос о поставке 'Application.Current.Exit()' над оператором 'return', но это закроет все, прежде чем появится мое сообщение об ошибке. Что тоже плохо.

Другое решение пропускало всю функцию CoreDispatcher и просто запускало ShowAsync(), за исключением того, что вызывало бы другую известную ошибку. В основном у меня есть несколько MessageDialogs, которые вызывают метод SaveData() и открывают MessageDialog, когда другой MessageDialog уже открыт, опять же, не очень хорошо.

Вот и все: мне нужно что-то, чтобы остановить выполнение моей формы кода, не убивая всего приложения или не отображая мое сообщение об ошибке. Что я могу сделать?

+0

Вам нужно будет подождать, пока пользователь нажмет кнопку OK. Используйте MessageDialog.Commands. –

+0

Вот что я сейчас делаю. Моя проблема заключалась в том, что код продолжает выполняться до тех пор, пока это не произойдет, и я не хочу этого делать. Могу ли я остановить это? –

ответ

0

Короткая версия, я использовал решение этого парня: MessageDialog ShowAsync throws accessdenied exception on second dialog

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

Код для моего решения перемещен в метод SafeToSave(). Я сделал то, что парень в этой связи сделал, а затем изменили это:

CoreDispatcher cD = Window.Current.CoreWindow.Dispatcher; 
await cD.RunAsync(CoreDispatcherPriority.Normal, async() => 
{ 
    await restartMessage.ShowAsync(); 
}); 

В это:

await restartMessage.ShowAsync(); 

И в отличие от прежде, чем я не получаю сообщение об ошибке доступа для вызова ShowAsync(), а другой MessageDialog уже, потому что я принудительно закрываю его в первую очередь.