C# TaskScheduler更新Form界面遇到的问题

tech2026-08-23  1

在异步编程时,可以使用TaskScheduler来直接更新

下面代码在线程中去改变Label.Text的值,会出错

Task task = new Task(() => { //这里报错,不能从其他线程访问它 label1.Text = "123"; });

如何解决

Task task = new Task(() => { label1.Text = "123"; }); //解决 //类似一个invoke操作 task.Start(TaskScheduler.FromCurrentSynchronizationContext());

上面代码还有一个问题,如果更新界面之前有一个很耗时的操作,会导致界面直接卡死 实例:

Task task = new Task(() => { //这时UI线程会卡死,等待十秒之后,去更新界面控件 Thread.Sleep(10000); label1.Text = "123"; }); task.Start(TaskScheduler.FromCurrentSynchronizationContext())

如何解决

Task.Factory.StartNew(() => { Thread.Sleep(10000); }) .ContinueWith(t => { label1.Text = "123"; } ,TaskScheduler.FromCurrentSynchronizationContext());
最新回复(0)