下面代码在线程中去改变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());