Sto tentando di implementare nuovamente la finestra di dialogo di prova in Windows 8. La finestra di dialogo viene visualizzata correttamente la prima volta, ma quando si fa nuovamente clic si verifica un errore di accesso negato alla chiamata ShowAsync. Non so perché, ma è strano a volte il codice funziona bene e non ottengo l'eccezione quando inserisco i breakpoint. davvero clueless quiMessageDialog ShowAsync genera un'eccezione accessdenied nella seconda finestra di dialogo
ecco il codice.
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();
}
}
Per evitare di ottenere "Uso di non assegnata variabile locale 'asyncCommand'", ho dovuto assegnare null a asyncCommand quando viene assegnato. –
Nota a margine: il mio task era in esecuzione in un singolo thread e stavo facendo ONE ONE ShowAsync da un thread alla volta. Apparentemente se uno ShowAsync termina nel frame 1 e un secondo ShowAsync inizia nel frame 2, può comparire un errore di accesso negato in modo casuale: /. Tuttavia, la cancellazione manuale funziona. – RelativeGames
@clay Ho aggiornato il codice sopra – Syler