WPF 中实现 Winfrom 中 Application.DoEvents() 方法

摘要:
熟悉Winfrom Friends of the DoEvents()方法中的应用程序,必须使用过该方法。此方法可以立即处理消息队列中当前的所有Windows消息。例如,在按钮单击事件中,标签的Text属性需要每秒更改一次,如下代码所示:privatevoid button1_click(objectsender,EventArgse){For(inti=0;i˂50;i++){Thread.Sleep(500)

熟悉 Winfrom 中 Application.DoEvents() 方法的朋友一定用过此方法,此方法可以立即处理当前在消息队列中的所有 Windows 消息。 如在一个按钮单击事件中,需要每一秒改变label的Text属性,如下代码:

  1.      privatevoid button1_Click(object sender, EventArgs e) 
  2.      { 
  3.          for (int i = 0; i < 50; i++) 
  4.              Thread.Sleep(500); 
  5.              this.label1.Text = i.ToString(); 
  6.      } 

编译运行,单击按钮,你并不会见到lable一直改变,等到执行完,你只会看见49。而加上 Application.DoEvents() 方法则可以看到一直更改的文本

  1. privatevoid button1_Click(object sender, EventArgs e) 
  2.     for (int i = 0; i < 50; i++) 
  3.  
  4.         Thread.Sleep(500); 
  5.         this.label1.Text = i.ToString(); 
  6.         Application.DoEvents(); 
  7.  

好了,废话不多说了,不明白的可以参考 Application.DoEvents 方法

      在 WPF 中没有 Application.DoEvents() 方法,看下面实现代码:

  1. publicstaticclass DispatcherHelper 
  2.     [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)] 
  3.     publicstaticvoid DoEvents() 
  4.     { 
  5.         DispatcherFrame frame = new DispatcherFrame(); 
  6.         Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(ExitFrames), frame); 
  7.         try { Dispatcher.PushFrame(frame); } 
  8.         catch (InvalidOperationException) { } 
  9.     } 
  10.     privatestaticobject ExitFrames(object frame) 
  11.     { 
  12.         ((DispatcherFrame)frame).Continue = false
  13.         returnnull
  14.     } 

调用:

  1. DispatcherHelper.DoEvents(); 

免责声明:文章转载自《WPF 中实现 Winfrom 中 Application.DoEvents() 方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VIsualSVN server 安装及旧仓库导入ACS712电流传感器应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySql 常见错误代码大全 VV2

从机一直1593错误,排查了半天发现是从的配置文件中的server-id没改导致,此低级错误记录下警醒自己 B.1. 服务器错误代码和消息 服务器错误信息来自下述源文件: · 错误消息信息列在share/errmsg.txt文件中。“%d”和“%s”分别代表编号和字符串,显示时,它们将被消息值取代。 · 错误值列在share/errmsg.txt文件中...

Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协...

XAML

XAML定义   XAML是一种相对简单、通用的声明式编程语言,它适合于构建和初始化.NET对象。   XAML仅仅是一种使用.NET API的方式,把它与HTML、可伸缩向量图形(SVG)或其他特定领域的格式或语言作比较是完全错误的。XAML由一些规则(告诉解析器和编译器如何处 理XML)和一些关键字组成,但它自己没有任何有意义的元素。因此,如果在没有...

WPF 打开文件 打开路径对话框

WPF调用WinForm中的 OpenFileDialog 和 FolderBrowserDialog 来实现响应的功能 OpenFileDialog openFileDialog = newOpenFileDialog(); openFileDialog.Title = "选择文件"; openFileD...

Git 数据是怎么存储的

git 的数据存储数据结构是键值类型,git中底层生成了4中数据的对象 commit:commit 对象指向一个 tree 对象,并且带有相关的描述信息. tree: 可以看作一个目录 blob: 通常用来存储文件的内容 tag:tag 对象包括一个对象名(SHA1签名)、对象类型、标签名、标签创建人的名字(“tagger”), 还有一条可能包含有签名(...

RabbmitMQ 的配置及开启MQTT服务

RabbitMQ是一个在AMQP协议标准基础上完整的,可复用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平台上。 装RabbitMQ服务器必须首先安装 Erlang 运行环境。 安装Erlang 安装Erlang 时要注...