2016-06-07 4 views
1

Ich muss das Ergebnis einer MessageDialog warten, wenn meine UWP-Anwendung startet, während des Begrüßungsbildschirms. Also, ich habe dies MessageDialog innerhalb des MainPage Konstruktor:Warum warten MessageDialog in Seitenkonstruktor Nevers endet?

private async Task ParseConfiguration() 
{ 
    var dialog = new MessageDialog("Message", "Title"); 
    dialog.Commands.Add(new UICommand { Label = "Exit", Id = 0 }); 

    await dialog.ShowAsync(); 
} 


public MainPage() 
{ 
    ParseConfiguration(); // works, but I need to wait 
    ParseConfiguration().Wait(); // never exits this call 
} 

Wie kann ich dieses Problem beheben?

+0

Sie können verschieben, was auch immer Sie tun möchten, nachdem Dialog zur Fortsetzung dieser Aufgabe angezeigt wird: ParseConfiguration(). ContinueWith (t => {... Dinge hier tun ...}); – Evk

+1

Bitte überprüfen Sie diesen Beitrag: http://blogs.msdn.com/b/pfxteam/archive/2011/01/13/10115163.aspx –

+0

@Evk ok, aber ich muss immer noch auf das Ergebnis meiner asynchronen Aufgabe warten. – Nick

Antwort

1

Sie blockieren Ihren UI-Thread, indem Sie auf diese Aufgabe warten. Daher kann der Dialog (der offensichtlich auch UI-Threads anzeigen muss) nicht angezeigt werden. Der Seitenkonstruktor ist jedoch sowieso kein guter Ort, um dies zu tun (und Konstruktoren im Allgemeinen). Stattdessen (zum Beispiel, das ist nicht der einzige Ort) Sie können dies tun, in Application.OnLaunched:

protected override async void OnLaunched(LaunchActivatedEventArgs e) { 
    // some other code here 
    // parse configuration before main window is shown 
    await ParseConfiguration(); 
    // some more code here, including showing main windo 
} 

Dies wird Ihr Dialog während Begrüßungsbildschirm angezeigt werden, aber vor Haupt-Seite angezeigt wird (wie Sie wollen). Sie können auch die gesamte Anwendung zu diesem Zeitpunkt beenden, wenn etwas schief geht.

Verwandte Themen