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)
        {
            Add();
        }
        int errorCount = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            panel1.Controls.Clear();
            Add();

        }

如上代码,100ms的定时器,执行几分多钟后就会崩溃,提示StackOverFlow,推测可能是添加Button时队列里有新事件,DoEvents引爆导致。

原文地址:https://www.cnblogs.com/zhaogaojian/p/8483860.html

时间: 2024-11-14 12:50:55

C#中慎用Application.DoEvents的相关文章

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

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

Application.DoEvents()的使用

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

Application.DoEvents()笔记

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

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(); 性能比较低

ASP.NET中利用Application和Session统计在线人数、历史访问量

先来简单说一下ASP.NET中的Application和Session 下图是我们非常熟悉的Web应用程序的结构: 在这张图中,Web服务器中运行的Web应用程序就是我们所说的Application,每个客户端与Web服务器之间建立的连接就可以看做是一个Session.比如现在服务器端运行的是一个论坛系统,那么现在这个正运行在服务器端的论坛系统的软件就可以看做Application,而每个在线的用户与之建立的连接就相当于一个Session. 那么很容易就会理解,Application是共享的,相

ssh中的application.xml配置

关于mySql 的 jdbc.properties 1 jdbc.driverClassName=com.mysql.jdbc.Driver 2 jdbc.url=jdbc:mysql://localhost:3306/ue_project 3 jdbc.username=root 4 jdbc.password=huashow ssh中的application.xml配置 1 <?xml version="1.0" encoding="UTF-8"?>

如何调用另一个包中的Application

在项目中要集成Xabber,将它作为一个Lib, ..... Xabber 原有代码 /** * Base entry point. * * @author alexander.ivanov */ public class Application extends android.app.Application { Xabber 中 AndroidManifest.xml <application        android:debuggable="true"        an

WPF-模拟Application.DoEvents的类

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