WPF 使用Task更新UI
有时候,我们需要操作比较耗时的操作,但又不想界面出现假死现象来等待我们的操作,我们可以使用一些遮罩层动画,在进行耗时的操作时,用一些加载动画来规避界面假死;
Task task = new Task(() =>
{
//开启加载动画跨线程更新UI(myAnimation指遮罩层动画)
this.Dispatcher.Invoke(() => {
myAnimation.Visibility = Visibility.Visible;
});
//这里假如处理比较耗时的工作任务,用如下Sleep代替
System.Threading.Thread.Sleep(3000);
});
//线程开启
task.Start();
//线程结束
task.ContinueWith((a) =>
{
//关闭加载动画
this.Dispatcher.Invoke(() => {//UI控件数据更新
myAnimation.Visibility = Visibility.Collapsed;
});
});
遮罩层效果可以参考:
https://blog.csdn.net/qq_43024228/article/details/117767208?spm=1001.2014.3001.5501
也可以用下面来更新UI线程;
this.Dispatcher.BeginInvoke(new Action(() =>
{
//处理更新UI线程
}));
我们也可以用BackgroundWorker类来处理比较耗时的操作;