У меня есть небольшое приложение winforms, которое выполняет длительный процесс в другом потоке с помощью задачи TPL. Во время этого продолжительного процесса я хотел бы обновить пользовательский интерфейс (индикатор выполнения или что-то еще). Есть ли способ сделать это без необходимости .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());
}
}
Выполняя этот код, я получаю вездесущее исключение:
Неверная операция поперечного потока: элемент управления 'textBox1' доступен из потока, отличного от потока, на котором он был создан.