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;}

转载于:https://www.cnblogs.com/flycloudliestar/p/7743698.html

WPF MVVM模式下的无阻塞刷新相关推荐

  1. wpf mvvm模式下CommandParameter传递多参

    wpf mvvm模式下CommandParameter传递多参 原文:wpf mvvm模式下CommandParameter传递多参 CommandParameter一般只允许设置一次,所以如果要传递 ...

  2. C# WPF MVVM模式下在主窗体显示子窗体并获取结果

    01 - 前言 在winform中打开一个新的子窗体很简单,直接实例化窗体并show一下就可以: Form2 f2 = new Form2();f2.Show(); 或者 Form2 f2 = new ...

  3. C# WPF MVVM模式Prism框架下事件发布与订阅

    01 - 前言 处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Prism提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事 ...

  4. C# WPF MVVM模式Caliburn.Micro框架下事件发布与订阅

    01 - 前言 处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Caliburn提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间 ...

  5. C# WPF MVVM模式Prism框架从零搭建(经典)

    01 - 前言 目前最新的PRISM的版本是8.1.97,本节以6.3.0.0 讲解,可以在Github上获取PRISM的源码. Prism Github地址:https://github.com/P ...

  6. WPF随笔(十四)--如何在MVVM模式下关闭窗口

    离上一篇WPF随笔有多久,再度编码WPF项目就有多久.机缘巧合又接下了一个开发WPF桌面程序的任务,又有机会详细研究之前一直忽略的细节. 今天就来谈谈如何在MVVM模式下关闭窗口. 什么?关闭窗口还要 ...

  7. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...

    WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...

  8. MVVM模式下 DataTemplate 中控件的绑定

    今天给ListBox中通过DataTemplate生成的Button绑定命令时,一开始Button始终找不到绑定的命令.现找到了正确的绑定方式,特来记录一下. 先上个正确的示例: <ListBo ...

  9. MVVM模式下实现拖拽

    MVVM模式下实现拖拽 原文:MVVM模式下实现拖拽 在文章开始之前先看一看效果图 我们可以拖拽一个"游戏"给ListBox,并且ListBox也能接受拖拽过来的数据, 但是我们不 ...

最新文章

  1. Java实现MD5(32/16位大小写)加密
  2. ZigBee On Windows Mobile--3.模拟器和实物调试
  3. Ubuntu下mysql中文乱码的解决
  4. 通讯录javafx和mysql_用javafx实现通讯录
  5. LeetCode204——count primes
  6. go gin框架:Any响应任何请求类型
  7. [HEOI2013] SAO(dp + 组合数 + 前缀和)
  8. [转载]Asp.net MVC中Controller返回值类型
  9. php 网站api,php – 如何调节网站的API用户?
  10. npu算力如何计算_华为云郑叶来:多元算力驱动应用创新
  11. freecplus框架-PostgreSQL数据库操作
  12. 微型计算机系统的主存储器,微型计算机系统中 ,操作系统保存在硬盘上,其主存储器应该采用 ( )...
  13. AtCoder Regular Contest 088
  14. 【bzoj 3433】{Usaco2014 Jan} Recording the Moolympics(算法效率--贪心)
  15. 获取url路径上的参数,(避免中文乱码)
  16. 基于VB6.0的MICAPS风云二号卫星云图转化实例(转载)
  17. 公交一卡通交通卡iphone“钱包”已有此卡无法添加的解决办法
  18. qq企业邮箱的发送邮件服务器地址,腾讯企业邮箱smtp发邮件
  19. WRF模式运行及相关问题的解决
  20. php 条形码在线怎么生成,php实现在线生成条形码示例分享(条形码生成器)

热门文章

  1. python2.7爬虫实例-Python2.7爬虫-爬取简书文章-入门
  2. 零基础自学python的app-编程零基础应当如何开始学习 Python?
  3. python自学什么书比较好-有什么好的自学 Python 的书籍推荐?
  4. python爬虫经典教程-python爬虫经典例子有哪些
  5. python基础教程书籍推荐-小猿圈推荐Python入门书籍,不知道这些你就太low了。
  6. 编程没基础学python多长时间-零基础学Python的过程有多难?需要多久?
  7. python电脑版微信-python如何实现远程控制电脑(结合微信)
  8. 中国最大的python社区-python中的最小最大算法
  9. monty python喜剧-【网络小说网中心】最经典的100部美剧,看到第一名瞬间服气!
  10. 鱼c论坛python课后题-【零基础】Python3学习课后练习题(十九)