Ich versuche eine Aktion im Hintergrund auszuführen, ohne die Benutzeroberfläche zu blockieren.Lange Aufgaben ausführen, ohne die Benutzeroberfläche zu blockieren
Natürlich könnte ich BackgroundWorker dafür verwenden.
Allerdings möchte ich es nur mit der Task-API tun.
Ich habe versucht:
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
await LongOperation();
}
// It freezes the UI
und
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
var task = Task.Run(()=> LongOperation());
task.Wait();
}
// It freezes the UI
Also muss ich mich zurück Background? Oder gibt es eine Lösung, die nur Aufgaben verwendet?
Warum mögen so viele Leute BackgroundWorker nicht? Ich mag es und finde die Syntax direkt. – Paparazzi
'BackgroundWorker' ist viel besser als' Thread', aber 'Task'-basierte APIs werden schließlich dominieren. Ich habe [einen verwandten Blogbeitrag] (http://nitoprograms.blogspot.com/2010/08/various-implementations-of-asynchronous.html). 'Task.Run' hat die folgenden Vorteile: (1) erlaubt das Verschachteln; (2) die Stornierungsunterstützung verwendet das vereinheitlichte "CancellationToken" -System; (3) Ausnahmen werden natürlicher mit einem korrekten Aufrufstapel verbreitet; (4) Ergebnisse werden natürlicher abgerufen; (5) verwendet weniger Ressourcen (Thread-Pool statt dedizierten Thread). –