Ho una semplice app per winforms che esegue un processo di esecuzione prolungata su un altro thread tramite un'attività TPL. Durante questo lungo processo vorrei aggiornare l'interfaccia utente (la barra di avanzamento o qualcosa del genere). C'è un modo per farlo senza essere obbligato a. Continuare con()?Come aggiornare l'interfaccia utente dalle attività secondarie in WinForms
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());
}
}
L'esecuzione di questo codice ottengo l'eccezione onnipresente:
Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on.
Penso che si debba incollare il riferimento della casella di testo al thread. – jwillmer