我有一个简单的WinForms应用程序,通过TPL任务在线程上执行长时间运行的进程。在这个长时间运行的过程中,我想更新UI(例如进度条)。是否有一种方法可以在不需要使用.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'。