Ésta es una de mis principales resultados de la búsqueda y todavía ningún ejemplo para el progreso en Task Parallel Library
aquí ...
Hoy me encontré con TPL porque quiero desarrollar una nueva aplicación multiproceso pero sin utilizar BackgroundWorker
(porque leer en algún lugar sobre la tarea con buen código antes)
compilo el ejemplo de respuesta @Stephen Cleary, su enlace bastante complicado para buscar progreso, y algunos otros sitios web.
Este es el ejemplo muy simple de cómo hacer Progreso y Completado con forma segura hilo de interfaz de usuario:
TaskScheduler currentTaskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
Task<string>.Factory.StartNew(() =>
{
// loop for about 10s with 10ms step
for (int i = 0; i < 1000; i++)
{
Thread.Sleep(10);
Task.Factory.StartNew(() =>
{
// this is a task created each time you want to update to the UI thread.
this.Text = i.ToString();
}, CancellationToken.None, TaskCreationOptions.None, currentTaskScheduler);
}
return "Finished!";
})
.ContinueWith(t =>
{
// this is a new task will be run after the main task complete!
this.Text += " " + t.Result;
}, currentTaskScheduler);
El código se mostrará 1 a 1000 dentro de 10 segundos y luego añadir una "meta! " cadena en la barra de título de forma de ventanas. Puede ver que el TaskScheduler es la manera complicada de crear una actualización segura de subprocesos de UI porque creo que la tarea programada se ejecutará en el hilo principal.
¿alguna solución final con código fuente completo? – Kiquenet