Ich brauche ein Overlay auf einem WPF Wizardcontrol laden. Ich benutze ein busyIndicator tool von der wpf extendedlit.Benutzerdefinierte Busy-Overlay auf WPF WizardControl mit Async erwarten
Der Code für Async erwartet funktioniert, aber die Gui-Thread-Sperren. Ich versuche, eine Nachricht bitte warten hinzufügen, wenn die warten auf die Funktion
private async void Button1_Click(object sender, RoutedEventArgs e)
{
BusyIndicator.IsBusy = true;
BusyIndicator.IsEnabled = true;
BusyIndicator.BusyContent = "Please wait while Site is provisioned";
await Task.Run(() =>
{
LongRunningFunction();
});
BusyIndicator.IsBusy=false;
}
Die XAML für die BusyIndicator nennt als unten.
<xctk:BusyIndicator x:Name="BusyIndicator" IsBusy="False" BusyContent="Please Wait">
</xctk:BusyIndicator>
Die LonRunningFunction ist ein Webservice Aufruf, die nicht die Benutzeroberfläche nur nicht aktualisiert liefert einen Bool Wert
public static bool LongRunningFunction(string URL)
{
bool IsPresent = CallWebservice()
return IsPresent;
}
Ausgabe
1) Die BusyIndicator scheint nicht statt, bevor der Asynchron-Aufruf zu feuern es scheint Feuer zu sein, wenn die LongRunning-Aufgabe abgeschlossen ist
2) Was ist der richtige Prozess, um ein GUI-Overlay aufzurufen, wenn async und warten verwendet wird.
Haben Sie versucht, 'ThreadPool' zu verwenden anstatt zu warten? Das Problem ist dann, dass, wenn Sie irgendwelche UI-Elemente in dieser longRunningTask manipulieren, Sie Dispatcher verwenden müssen, [Here] (http://stackoverflow.com/a/37483878/2029607) ist, wie Sie es in Ihrem Code verwenden können. – XAMlMAX
@XAMlMAX Er * verwendet * den Thread-Pool. 'Task.Run' plant die Arbeit in einem Thread-Pool-Thread. – Servy
Ohne 'LongRunningFunction' zu sehen, gibt es keine Möglichkeit zu wissen, warum der Code nicht funktioniert. Offensichtlich tut es * etwas * sollte es nicht, aber wir wissen nicht was. – Servy