Cómo actualizar la interfaz de usuario desde tareas secundarias en WinForms
Tengo una pequeña aplicación winforms simple que realiza un proceso de larga ejecución en otro hilo a través de una tarea TPL. Durante este largo proceso de ejecución, me gustaría actualizar la interfaz de usuario (la barra de progreso o algo así). ¿Hay alguna manera de hacer esto sin tener que .ContinueWith ()?
public partial class Form1 : Form
{
private Task _childTask;
public Form1()
{
InitializeComponent();
Task.Factory.StartNew(() =>
{
// Do some work
Thread.Sleep(1000);
// Update the UI
_childTask.Start();
// Do more work
Thread.Sleep(1000);
});
_childTask = new Task((antecedent) =>
{
Thread.Sleep(2000);
textBox1.Text = "From child task";
}, TaskScheduler.FromCurrentSynchronizationContext());
}
}
Ejecutando este código, obtengo la excepción omnipresente:
La operación entre hilos no es válida: controle 'textBox1' al que se accede desde un hilo que no sea el hilo en el que se cre