Sto tentando di eseguire un'azione in background, senza congelare l'interfaccia utente.Esecuzione di attività lunghe senza congelare l'interfaccia utente
Ovviamente, potrei usare BackgroundWorker per questo.
Tuttavia, mi piacerebbe farlo solo con l'API delle attività.
ho provato:
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
await LongOperation();
}
// It freezes the UI
e
async void OnTestLoaded(object sender, RoutedEventArgs e)
{
var task = Task.Run(()=> LongOperation());
task.Wait();
}
// It freezes the UI
Quindi devo tornare a BackgroundWorker? O esiste una soluzione solo con Google Task?
Perché così tante persone non amano BackgroundWorker? Mi piace e trova la sintassi diretta. – Paparazzi
'BackgroundWorker' è molto meglio di' Thread', ma alla fine domineranno le API basate su Task'. Ho [un post sul blog correlato] (http://nitoprograms.blogspot.com/2010/08/various-implementations-of-asynchronous.html). 'Task.Run' presenta i seguenti vantaggi: (1) consente il nesting; (2) il supporto per la cancellazione utilizza il sistema unificato 'CancellationToken'; (3) le eccezioni si propagano più naturalmente con uno stack di chiamate corretto; (4) i risultati sono recuperati in modo più naturale; (5) utilizza meno risorse (pool di thread anziché thread dedicati). –