Próbuję zaimplementować okno dialogowe spróbuj ponownie/anuluj w oknach 8. Okno dialogowe pokazuje dobrze za pierwszym razem, ale po kliknięciu spróbuj ponownie i ponownie nie, otrzymam wyjątek odmowy dostępu po wywołaniu ShowAsync. Nie wiem dlaczego, ale czasami dziwne, że kod działa dobrze i nie dostaję wyjątku, kiedy umieszczam punkty przerwania. naprawdę niezorientowany tutajMessageDialog ShowAsync zgłasza wyjątek accessdenied w drugim oknie dialogowym
tutaj jest kod.
async void DismissedEventHandler(SplashScreen sender, object e)
{
dismissed = true;
loadFeeds();
}
private async void loadFeeds()
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() =>
{
try
{
RSSDataSource rssDataSource = (RSSDataSource)App.Current.Resources["RSSDataSource"];
if (rssDataSource != null)
{
await rssDataSource.DownloadFeeds();
await rssDataSource.GetFeedsAsync();
}
AdDataSource ads = (AdDataSource)App.Current.Resources["AdDataSource"];
if (ads != null)
{
await ads.DownloadAds();
}
rootFrame.Navigate(typeof(HomePageView));
Window.Current.Content = rootFrame;
}
catch
{
ShowError();
}
});
}
async void ShowError()
{
// There was likely a problem initializing
MessageDialog msg = new MessageDialog(CONNECTION_ERROR_MESSAGE, CONNECTION_ERROR_TITLE);
// Add buttons and set their command handlers
msg.Commands.Add(new UICommand(COMMAND_LABEL_RETRY, new UICommandInvokedHandler(this.CommandInvokedHandler)));
msg.Commands.Add(new UICommand(COMMAND_LABEL_CLOSE, new UICommandInvokedHandler(this.CommandInvokedHandler)));
// Set the command to be invoked when a user presses 'ESC'
msg.CancelCommandIndex = 0;
await msg.ShowAsync();
}
/// <summary>
/// Callback function for the invocation of the dialog commands
/// </summary>
/// <param name="command">The command that was invoked</param>
private void CommandInvokedHandler(IUICommand command)
{
string buttonLabel = command.Label;
if (buttonLabel.Equals(COMMAND_LABEL_RETRY))
{
loadFeeds();
}
else
{
// Close app
Application.Current.Exit();
}
}
Aby zapobiec coraz "Użyj nieprzypisanych zmiennej lokalnej 'asyncCommand'", miałem na przypisanie null do asyncCommand po przypisaniu. –
Uwaga boczna: Miałem własne uruchamianie zadań w jednym wątku i robiłem JEDEN showAsync z JEDNEGO wątku naraz. Wygląda na to, że jeśli jedna ShowAsync kończy się w klatce 1, a druga ShowAsync rozpoczyna się w klatce 2, może pojawić się losowy błąd odmowy dostępu: /. Ręczne anulowanie jednak działa. – RelativeGames
@clay Zaktualizowałem kod powyżej – Syler