//普通方法
private void btnUpdate_Click(object sender, EventArgs e)
{
Task task = new Task(() =>
{
this.lblInfo.Text = "来自Task的数据更新:我们正在学习多线程!";
});
//task.Start(); //这样使用会报错
//使用下面的方式解决报错的问题
task.Start(TaskScheduler.FromCurrentSynchronizationContext());
}
//针对UI耗时的情况,单独重载其实并不是很好
private void btnUpdate_Click1(object sender, EventArgs e)
{
Task task = new Task(() =>
{
//模拟耗时(这个地方会卡主)
Thread.Sleep(5000);
this.lblInfo.Text = "来自Task的数据更新:我们正在学习多线程!";
});
//task.Start(); //这样使用会报错
//使用下面的方式解决报错的问题
task.Start(TaskScheduler.FromCurrentSynchronizationContext());
}
//针对耗时任务,我们可以使用新的方法
private void btnUpdate_Click2(object sender, EventArgs e)
{
this.btnUpdate.Enabled = false;
this.lblInfo.Text = "数据更新中,请等待......";
Task task =Task.Factory.StartNew(() =>
{
Thread.Sleep(5000); //有耗时的任务,我们可以放到ThreadPool中
});
//在ContinueWith中更新我们的数据
task.ContinueWith(t =>
{
this.lblInfo.Text = "来自Task的数据更新:我们正在学习多线程!";
this.btnUpdate.Enabled = true;
},TaskScheduler.FromCurrentSynchronizationContext()); //更新操作到同步的上下文中
}