Я использую MessageDialogues
в нескольких местах над своим приложением. Проблема в том, что когда-либо есть MessageDialog
(или системное предупреждение, такое как предупреждение о возможности), и еще один мой MessageDialog
вызывается, аварийное завершение работы приложения без каких-либо исключений или с UnathorizedAccessException
.Кратковременное крах приложения MessageDialog
Это, как я называю MessageDialog:
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() =>
{
MessageDialog msg2 = new MessageDialog(_resourceLoader.GetString("MsgGPSUnavailable"));
msg2.ShowAsync();
});
Я думал, что я должен ждать закрытия диалогового окна, но с помощью Dispatcher
I очереди этого диалога в основном поток пользовательского интерфейса, который обрабатывает это сам, или не? Спасибо за любое объяснение этой проблемы.
Редактировать - Я продолжал шаг за шагом и получил следующий код, который содержится в том же классе. Когда я запускаю приложение, вызывается LoadDataToModel. Это нормально, и диалог отображается с помощью msgGPSDisabled. После этого возникает событие и вызывается locator_StatusChanged. Это тоже нормально, и отображается диалог. Теперь странная часть. Когда я не вызываю msgGPSDisabled в LoadDataToModel и только в файле locator_StatusChanged, приложение вылетает сразу после показа диалога. Никаких исключений и App.g.i.cs не открывается в строке 47 (DEBUG & &! DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION). Даже если я использую try-catch, если он может быть использован. Когда я использую msgGPSDisabled без диспетчера в locator_StatusChanged, исключаются исключения. Не catchable, «элемент не найден»
public async Task LoadDataToModel()
{
await msgGPSDisabled();
this.IsBusy = true;
await LoadDataGarvis(Stations); //rozparsuje raw data a načte je do modelu
InitializePins();
this.IsBusy = false;
}
void locator_StatusChanged(Geolocator sender, StatusChangedEventArgs args)
{
switch (sender.LocationStatus)
{
case Windows.Devices.Geolocation.PositionStatus.Disabled:
try
{
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() =>
{
await msgGPSDisabled();
IsGPSBusy = false;
IsGPS = false;
});
}
catch (UnauthorizedAccessException)
{
throw;
}
catch (Exception) {throw; }
case Windows.Devices.Geolocation.PositionStatus.NoData:
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() =>
{
await msgGPSUnavailable();
});
}
}
private async Task msgGPSDisabled()
{
MessageDialog sss = new MessageDialog(_resourceLoader.GetString("MsgGPSDisabled"));
await sss.ShowAsync();
}
Большое спасибо. Это решило мою проблему и спасло мое здравомыслие! – Qerts