Application.DoEvents()的使用

最近做了一个个人数字图书馆管理系统,因为牵扯到电脑文件的扫描,想做一个实时显示当前扫面文件的功能,就类似于360文件扫描时的效果,本来打算用多线程来实现,但是方法太多没有实现,后来在程序中进行控制,由于文件太多,出现了假死现象,就连自己定义好的Timer计时器都出出现了假死,所以这个问题必须解决,随后在座的过程中,突然发现了Application.DoEvents(),使用了一下,相爱过很好,解决了自己遇到的问题。本文主要把Application.DoEvents()方法做个介绍。

记得第一次使用Application.DoEvents()是为了在加载大量数据时能够有一个数据加载的提示,不至于系统出现假死的现象,当时也没有深入的去研究他的原理是怎样的,结果在很多地方都用上了Application.DoEvents(),今天看到了关于这方面的一些文章,知道我以前有些用法是不当的,有些地方需要慎用Application.DoEvents()。
首先我们先看看在循环比较大的程序中,它的作用还是不错的,起到了一个实时响应的效果,例如:

for (int q = 0; q < 1000000; q++)
            {
                textBox1.Text = q.ToString();
                Application.DoEvents();//实时响应文本框中的值
            }

如果没有加上 DoEvents的话,由于循环时间会比较久就会出现假死的状态,而且程序不能处理其他的事件。而如果加上DoEvents的话就会对文本框的值实时响应,给用户带来较好的用户体验,可是DoEvents也带来了效率上的问题,处理同样的一个事件调用了DoEvents后效率降低了好几倍,这也是为什么要慎用的原因了。

时间: 2024-11-06 16:28:42

Application.DoEvents()的使用的相关文章

Application.DoEvents()笔记

msdn的备注:当运行 Windows 窗体时,它将创建新窗体,然后该窗体等待处理事件. 该窗体在每次处理事件时,均将处理与该事件关联的所有代码. 所有其他事件在队列中等待. 当代码处理事件时,应用程序不会响应. 例如,如果将甲窗口拖到乙窗口之上,则乙窗口不会重新绘制.如果在代码中调用 DoEvents,则您的应用程序可以处理其他事件. 例如,如果您有向 ListBox 添加数据的窗体,并将 DoEvents 添加到代码中,那么当将另一窗口拖到您的窗体上时,该窗体将重新绘制. 如果从代码中移除

c#学习笔记之Application.DoEvents应用

Visual Studio里的摘要:处理当前在消息队列中的所有 Windows 消息. 交出CPU控制权,让系统可以处理队列中的所有Windows消息 比如在大运算量循环内,加Application.DoEvents可以防止界面停止响应 因为winform的消息循环是一个线程来处理,那么假如你的某个操作比较耗时,那么消息处理得等你这个耗时操作做完了才能继续,而Application.DoEvents方法就是允许你在耗时操作的内部调用它,而去处理消息队列中的消息. 像鼠标移动鼠标点击都是windo

Application.DoEvents()的作用

Application.DoEvents()的作用:处理所有的当前在消息队列中的Windows消息. [c-sharp] view plaincopy private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < 10000; i++) { label1.Text = i.ToString(); Application.DoEvents(); } } 测试了一下,没有Application.DoEvent

C#之Application.DoEvents()

Application.DoEvents()的最大作用就是时时响应, 可以看做是个线程的一个封装 private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < 990000; i++) { textBox1.Text = i.ToString(); Application.DoEvents();//时时响应文本框中的值 } } 但是不要滥用DoEvents(); 性能比较低

WPF-模拟Application.DoEvents的类

/// <summary>    ///     /// </summary>    public static class DispatcherHelper    {        /// <summary>        /// Simulate Application.DoEvents function of <see cref=" System.Windows.Forms.Application"/> class.       

Application.DoEvents()

刚刚做一个小的地图瓦片下载程序,本来想加个进度条来显示下载进度,但是不知道要下多少张图片,progressBar不太会用,于是直接加了个lable标签计数. 发现在运行的时候,lable标签并没有实时显示计数结果,鼠标拖动窗体程序会卡死,于是百度了一下,ok,Application.DoEvents()就这样出现在了眼前,加到循环后面,运行完美. Application.DoEvents():刷新窗体信息 计算瓦片的位置百度搜索:Slippy map tilenames(瓦片和经纬度换算)

C#中慎用Application.DoEvents

private void Add() { for (int i = 0; i < 100; i++) { Button button = new Button(); button.Width = 300; button.Height = 200; panel1.Controls.Add(button); Application.DoEvents();//此处用的话会导致问题 } } private void button1_Click(object sender, EventArgs e) {

浅谈C# application.DoEvent作用

Application.DoEvents()的作用:处理所有的当前在消息队列中的Windows消息. [c-sharp] view plain copy private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < 10000; i++) { label1.Text = i.ToString(); Application.DoEvents(); } } 测试了一下,没有Application.DoEven

【转】C# Application.DoEvent()的作用

Application.DoEvents()的作用:处理所有的当前在消息队列中的Windows消息. private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < 10000; i++) { label1.Text = i.ToString(); Application.DoEvents(); } } 测试了一下,没有Application.DoEvents()的时候,Label基本处于假死机状态,最后显