- 浏览: 223855 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
synack:
写的很好,图文并茂,语言简单清晰,赞!
SkipList 跳表 -
king_c:
jiandandecaicai 写道你好,请教一下是如何通过E ...
从Hadoop URL 中读取数据 -
jiandandecaicai:
你好,请教一下是如何通过Eclipse来连接Hadop机群的, ...
从Hadoop URL 中读取数据
记得第一次使用Application.DoEvents()是为了在加载大量数据时能够有一个数据加载的提示,不至于系统出现假死的现象,当时也没有深入的去研究他的原理是怎样的,结果在很多地方都用上了Application.DoEvents(),今天看到了关于这方面的一些文章,知道我以前有些用法是不当的,有些地方需要慎用Application.DoEvents()。 如果没有加上 DoEvents的话,由于循环时间会比较久就会出现假死的状态,而且程序不能处理其他的事件。而如果加上DoEvents的话就会对文本框的值实时响应,给用户带来较好的用户体验,可是DoEvents也带来了效率上的问题,处理同样的一个事件调用了DoEvents后效率降低了好几倍,这也是为什么要慎用的原因了。下面是我做的一个测试:
首先我们先看看在循环比较大的程序中,它的作用还是不错的,起到了一个实时响应的效果,例如:
{
textBox1.Text = q.ToString();
Application.DoEvents();//实时响应文本框中的值
}
{
expendTime.start();
for (int q = 0; q < 100000; q++)
{
textBox1.Text = q.ToString();
Application.DoEvents();
}
label2.Text = expendTime.ComputerTime();//计算耗时
}
private void button2_Click(object sender, EventArgs e)
{
expendTime.start();
for (int q = 0; q < 100000; q++)
{
textBox2.Text = q.ToString();
}
label3.Text = expendTime.ComputerTime();//计算耗时
}
执行耗时对比:
从较大数据的循环中可以看出效率是很低的,所以如果能不调用DoEvents就尽量不用。也可以通过别的方法来处理的,例如多线程异步调用等。
MSDN中的定义:
当运行 Windows 窗体时,它将创建新窗体,然后该窗体等待处理事件。该窗体在每次处理事件时,均将处理与该事件关联的所有代码。所有其他事件在队列中等待。在代码处理事件时,应用程序并不响应。例如,当将另一窗口拖到该窗口前面时,该窗口不重新绘制。如果在代码中调用 DoEvents,则您的应用程序可以处理其他事件。例如,如果您有向 ListBox 添加数据的窗体,并将 DoEvents 添加到代码中,那么当将另一窗口拖到您的窗体上时,该窗体将重新绘制。如果从代码中移除 DoEvents,那么在按钮的单击事件处理程序执行结束以前,您的窗体不会重新绘制。
通常,您在循环中使用该方法来处理消息。
具体可参考这里。
发表评论
-
openface 人脸识别开放平台
2014-08-10 17:27 1775using System; using System.Co ... -
新中新二代身份证dll调用,报尝试读取或写入受保护的内存,这通常指示其他内存已损坏 这个错
2014-06-26 04:04 915新中新二代身份证dll调用问题: ... -
【OpenCV学习笔记】2.3 OpenCV2.2摄像头读取视频的问题和解决(VS2010)
2014-06-18 16:38 3941摄像头读取视频这一块研究了很长时间,终于弄好了。刚开始 ... -
C# 4.0 并行计算部分 [转发]
2014-05-03 15:24 1062沿用微软的写法,System.Threading.Task ... -
vector 转换成 数组 - [C++]
2013-12-13 18:06 4731参考: http://topic.csdn.n ... -
convert file into byte array
2012-05-12 23:16 924private byte [] StreamFile(s ... -
使用.NET中的XML注释-- 创建帮助文档入门篇
2012-04-07 11:24 1500一.摘要 在本系列 ... -
C#访问和操作MYSQL数据库
2012-03-23 09:59 1611这里介绍下比较简单的方式,引用MySql.Data.dll ... -
C#访问和操作MYSQL数据库
2012-03-23 09:58 1这里介绍下比较简单的方式,引用MySql.Data.dll ... -
http://www.microsoft.com/china/MSDN/library/langtool/VCSharp/USgetstart_vcsharp.
2012-03-22 21:26 1201http://www.microsoft.com/china/ ... -
使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明
2012-03-17 22:47 1286在网上看到很多网友在.NET程序中调用Win32 API, ... -
MarshalAs
2012-03-17 22:04 1346MarshalAs是提供向非托管代码封送数据时的规则。比如S ... -
Timeout expired. The timeout period elapsed prior ..
2012-02-26 19:13 1678关于这个问题,要 ... -
c#winform编程中获取cpu个数的方法 详细出处参考:http://www.ityoudao.com/Web/Csharp_590_1542.html
2012-02-23 18:44 970前些时间,为了配置合更加快速有效地制作Sphinx分词搜 ... -
C# socket 服务端实例
2011-12-08 19:50 1062IPAddress ipAddress; ... -
C# 文件操作
2011-12-08 19:40 760文件读取: Console.W ... -
C# 多线程处理相关说明: WaitHandle,waitCallback, ThreadPool.QueueUserWorkItem
2011-09-03 15:33 4099最近接触C#的一个项目,里面用到了多线程处理,这里做个备 ... -
c#的ThreadPool使用笔记(一)
2011-09-03 15:27 1900摘要:系列文章,从 ... -
C# 调用C++ DLL编码问题
2011-08-29 14:25 1536今天用C#调用C++写的一个DLL 死活不成功 ... -
关于global.asax 总结经验
2011-08-25 14:13 14071. 关于global.asax 总结 ...
相关推荐
在C#编程中,`Application.DoEvents()` 是一个经常被讨论的话题,特别是在处理用户界面(UI)更新和异步操作时。这个方法允许应用程序在执行长时间运行的任务时处理挂起的Windows消息,从而防止界面假死(也称为无...
但是,加入`Application.DoEvents()`后,每执行一次`DoEvents()`,UI线程就会检查并处理一次消息队列,使得`label1`的文本能够随着循环的进行而动态更新。 尽管`Application.DoEvents()`在某些场景下可以解决问题,...
本文档旨在探讨导致程序假死的原因及解决方案,特别是如何合理使用`Application.DoEvents()`方法来改善用户体验。 #### 二、程序假死现象分析 程序假死主要发生在以下几种情况: 1. **长时间的计算过程**:当程序...
1. 代码如下: private void Form1_Load(object sender, System.EventArgs e) ... Application.DoEvents(); this.Opacity=d; this.Refresh(); }2. 代码如下: private void timer1_Tick(object sender,
9. **理解ANR(Application Not Responding)**:当主线程阻塞超过5秒,系统会弹出ANR对话框,提示用户应用无响应。合理使用线程能有效避免这种情况。 10. **设计模式与最佳实践**: - 使用Handler+Runnable或...
在C#编程中,我们经常使用MessageBox来显示警告或提示信息。...本文将介绍一种方法,通过结合定时器(Timer)和SendKeys类,实现延时并自动关闭MessageBox的功能。 首先,我们需要创建一个Timer数组,用于存放多个计时...
该方法利用Windows API中的`timeGetTime`和`Sleep`函数,并结合循环和`Application.DoEvents()`确保在延时期间既不会导致界面冻结也不会过度占用CPU资源。对于那些需要简单、低资源消耗的延时功能的应用程序来说,这...
Application.DoEvents(); //SpeechSynthesizer synth = new SpeechSynthesizer(); //synth.SelectVoice("Microsoft Simplified Chinese"); Type type = Type.GetTypeFromProgID("SAPI.SpVoice"); dynamic ...
2. **延时与事件处理**:为了确保每次透明度变化都能被用户感知,使用了`Thread.Sleep(1)`进行微小延时,并通过`Application.DoEvents()`确保界面更新。 #### 方法二:使用定时器`Timer` 利用定时器可以更方便地...
需要注意的是,由于.NET的UI更新机制,我们需要使用Application.DoEvents()确保在每一步透明度变化后更新界面。Thread.Sleep()函数用来控制动画的节奏,数值越小,动画速度越快。 另外,对于窗体上的控件,它们也会...
刚研究VB控制QQ发送信息,网上找了点资料 在VS2010中的VB中测试了一下,能够发信息,目前只研究到这种程序 ... My.Application.DoEvents() Loop Until tick + HowLong < My.Computer.Clock.TickCount End Sub
在`loadingForm.Show()`后执行耗时操作,`Application.DoEvents()`确保在处理这些操作期间,UI仍能响应用户输入并更新加载画面。请注意,这种方法并不适合长时间的后台操作,因为它可能会导致UI线程阻塞,建议使用多...
- 在 Delphi 中,当需要应用程序在处理其他任务的同时也能响应用户操作时,使用 `Application.DoEvents` 可以确保应用程序保持响应状态。 #### 题目三:ListBox 和 ComboBox 更新技巧 1. **问题:**在 Delphi 中...
`Application.DoEvents()`调用确保在处理循环期间,UI可以及时响应,更新进度条的显示。 此外,`Step`属性可以用来指定每次递增的值,这在处理固定步长的进度时很有用。例如,如果每个步骤是2%,我们可以这样设置:...
`Progress.Value`的更新和`Application.DoEvents()`的调用确保了进度条随着文件复制的进程而实时更新。 为了进一步提高用户体验,还可以添加错误处理机制,比如使用`try-catch`块捕获可能出现的异常,并在复制失败...
需要注意的是,`Application.DoEvents()`函数被用来处理窗体事件,使得进度条能够在写入过程中实时更新。在实际项目中,可能需要更复杂的多线程或异步处理来避免阻塞UI。 在开发过程中,为了确保程序的健壮性,还...
根据文章提供的信息,我们可以推断出之所以会出现CPU占用率100%的情况,是因为在游戏主循环中不断地调用`gameEngine.Update()`和`Application.DoEvents()`。这两个方法会在短时间内被频繁地调用,没有给操作系统留出...
4. **刷新窗体**:每次更改透明度后调用 `Application.DoEvents()` 和 `Me.Refresh()` 来刷新界面,确保变化即时反映到界面上。 #### 三、具体实现步骤及代码示例 以下是一个具体的实现示例,该示例展示了如何在 ...
System.Windows.Forms.Application.DoEvents(); } } public login() { InitializeComponent(); // System.Threading.Thread.Sleep(2000); // this.label1.Text = "正在登陆 (" + Form1.parame + ")."; // ...