第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > WPF MVVM模式下的无阻塞刷新

WPF MVVM模式下的无阻塞刷新

时间:2022-07-08 08:55:50

相关推荐

WPF MVVM模式下的无阻塞刷新

MVVM模式下的无阻塞刷新的两种方法:

//传统模式下的无刷新调用(主线程开新线程,新线程又调用主线程来更新UI)

//第1步先在线程内部计算出需要绑定的数据

//第2步然后再使用Invoke/BeginInvoke填充Model

private void UserControl_Loaded(object sender, RoutedEventArgs e){return;Thread thread = new Thread(new ThreadStart(delegate{//第1步 耗时的计算或请求等操作的代码写在这里Thread.Sleep(10000);this.Dispatcher.Invoke(new Action(() =>{//又进入主线程//第2步 这里更新控件 或填充填充Model,来改变UI//this.Dispatcher.Invoke()中的this指的是当前的窗体类 。在Visual studio中将鼠标至于this上即可明白//这段代码是主线程来执行所以如果有耗时的运算则会导致UI卡顿。}));}));thread.IsBackground = true;thread.Start();}

//方法二:由于方法一在代码中嵌入线程函数,代码是很分散的,同时也消耗大量资源,

//为了让我们代码尽可能的做到内外同步执行。我们使用async、await、Task

private async Task AsyncAccess(){var getDataListTask = new Task(() =>{//耗时的计算或请求等操作的代码写在这里Thread.Sleep(5000);});getDataListTask.Start();await getDataListTask;var fillModelTask = Task.Factory.StartNew(() =>{//这里更新控件 或填充填充Model,来改变UI }, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());await fillModelTask;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。