社区
C#
帖子详情
System.Windows.Forms.Application.DoEvents();
froor
2010-10-23 05:23:50
C#语句。。。。这句话怎么理解,有什么用???
...全文
1299
7
打赏
收藏
System.Windows.Forms.Application.DoEvents();
C#语句。。。。这句话怎么理解,有什么用???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
足球中国
2010-10-23
打赏
举报
回复
DoEvents
My.Application.DoEvents 方法允许应用程序处理代码运行时可能引发的其他事件。My.Application.DoEvents 方法的行为与 DoEvents 方法的相同。
当您运行 Windows 窗体应用程序时,它将创建一个新窗体,该窗体等待要处理的事件。该窗体每次处理某个事件(如单击按钮)时,会处理与该事件关联的所有代码。所有其他事件将在队列中等待。当代码处理事件时,应用程序不会响应。例如,如果将甲窗口拖到乙窗口之上,则乙窗口不会重新绘制。
如果在代码中调用 My.Application.DoEvents,应用程序将可处理其他事件。例如,如果代码在一个循环中将数据添加到 ListBox,并且在该循环的每一步之后调用 My.Application.DoEvents,则当其他窗口被拖到您的窗体之上时,该窗体将重新绘制。如果从代码中移除 My.Application.DoEvents,则在按钮的单击事件处理程序执行完毕前,您的窗体不会重新绘制。
通常,您在循环中使用此方法来处理消息
其实就是把权利马上还给系统。让系统继续去做别的事情。
足球中国
2010-10-23
打赏
举报
回复
DoEvents
My.Application.DoEvents 方法允许应用程序处理代码运行时可能引发的其他事件。My.Application.DoEvents 方法的行为与 DoEvents 方法的相同。
当您运行 Windows 窗体应用程序时,它将创建一个新窗体,该窗体等待要处理的事件。该窗体每次处理某个事件(如单击按钮)时,会处理与该事件关联的所有代码。所有其他事件将在队列中等待。当代码处理事件时,应用程序不会响应。例如,如果将甲窗口拖到乙窗口之上,则乙窗口不会重新绘制。
如果在代码中调用 My.Application.DoEvents,应用程序将可处理其他事件。例如,如果代码在一个循环中将数据添加到 ListBox,并且在该循环的每一步之后调用 My.Application.DoEvents,则当其他窗口被拖到您的窗体之上时,该窗体将重新绘制。如果从代码中移除 My.Application.DoEvents,则在按钮的单击事件处理程序执行完毕前,您的窗体不会重新绘制。
通常,您在循环中使用此方法来处理消息
其实就是把权利马上还给系统。让系统继续去做别的事情。
threenewbee
2010-10-23
打赏
举报
回复
sp1234的说法如果没有看懂,我说一个浅显的。
在界面上放一个Label,一个Button。
编写如下代码:
Button_Click()
{
int k = 0;
for (int i = 0; i <= 999; i++, k = 0)
{
Label1.Text = i.ToString();
Application.DoEvents();
for (int j = 0; j <= 9999999; j++) k++; // 依照计算机性能不同,循环次数可以变化。
}
}
运行程序,单击按钮,Label的数字在增加。
这时候,如果再按一次,Label的数字会怎样呢?
它会再次从0开始,增加到999,之后再继续从前一个按钮处理事件中断的数字开始增加。
这明显说明,它和多线程一点没有关系。只是在遇到DoEvents()调用处理队列里面的消息,引发Button_Click,这次调用的Button_Click,相当于前一次的子程序。
假设在 i = 506 的时候,你按动了Button,那么执行的代码等效:
Button_Click()
{
int k = 0;
for (int i = 0; i <= 999; i++, k = 0)
{
Label1.Text = i.ToString();
if (i == 506) Button_Click();
for (int j = 0; j <= 9999999; j++) k++; // 依照计算机性能不同,循环次数可以变化。
}
}
以专业开发人员为伍
2010-10-23
打赏
举报
回复
关于消息机制,可以google:
http://www.google.com.hk/search?q=windows%E6%B6%88%E6%81%AF%E5%BE%AA%E7%8E%AF&rls=com.microsoft:zh-cn:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7&hl=zh-CN
DoEvent就是在程序中递归调用一次消息处理程序,让处理程序处理下一条消息,然后返回来继续执行当前的代码。这并不会让程序多线程执行,要注意别把多线程的说法往这个递归调用消息处理程序上面硬套。
或许现在学软件专业的学生在学《操作系统》课程是还是只能学点unix系统的皮毛,而连windows消息系统一丁点稍微底层的源代码都没有接触过。如果学过,我们招聘到的专业软件开发人员时或许可以招聘到几个比较容易理解windows系统基础的人。
skyering
2010-10-23
打赏
举报
回复
个人理解:Application.DoEvent()
举个例子如下:
有个查询按钮,其检索过程很耗时。所有需求是当点击查询按钮时,将其文本内容改为正在检索中...。并且将其Enable设为false。
this.btnSearch.Text = "正在检索中...";
this.btnEnable = false;
...
...
...
如果向上面那么写,那么点击查询按钮之后,并不能立即看到按钮样式和文本的改变。将其改为如下写法之后
this.btnSearch.Text = "正在检索中...";
this.btnEnable = false;
Application.DoEvent()
...
...
...
Application.DoEvent()意思就是使
this.btnSearch.Text = "正在检索中...";
this.btnEnable = false;两句代码的效果立即显示出来。并不会等到政策检索方法结束之后才看到效果(基本看不到效果)。
wuyq11
2010-10-23
打赏
举报
回复
Application.DoEvents()是为了在加载大量数据时能够有一个数据加载的提示,不至于系统出现假死的现象
可确保辅助线程激发的任何事件都由该 UI 线程处理
fellowcheng
2010-10-23
打赏
举报
回复
http://topic.csdn.net/u/20091222/13/70e03d90-1e08-43d1-96fe-05cb41c94930.html
http://www.cnblogs.com/jianggest/archive/2009/06/26/1437513.html
C# System.
Windows
.
Forms
.
Application
.Do
Events
()
cs开发中,有时候界面用线程还是会卡,因为要invoke实时更新窗口,从db读取数据。 用backgroundworker效果不理想,用线程也不理想。 加上这个效果好好多 System.
Windows
.Forsm.
Application
.Do
Events
(); msdn: 当运行窗体时,会创建新窗体,然后窗体等待处理各种事件,而窗体每次处理事件的时候,都会处理完与 该事件关联的所有代码,才会去处理其它事件。这时其它事件将会在队列中等待。所以在处理事件的时候,程序并不进行响应,当然也不会进行窗口重绘。 但是使
WPF 中实现 Winfrom 中
Application
.Do
Events
() 方法
熟悉 Winfrom 中
Application
.Do
Events
() 方法的朋友一定用过此方法,此方法可以立即处理当前在消息队列中的所有
Windows
消息。 如在一个按钮单击事件中,需要每一秒改变label的Text属性,如下代码: private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < 50; i++) {
System.
Windows
.
Forms
.
Application
.Do
Events
()
记得第一次使用
Application
.Do
Events
()是为了在加载大量数据时能够有一个数据加载的提示,不至于系统出现假死的现象,当时也没有深入的去研究他的原理是怎样的,结果在很多地方都用上了
Application
.Do
Events
(),今天看到了关于这方面的一些文章,知道我以前有些用法是不当的,有些地方需要慎用
Application
.Do
Events
()。 首先我们先看看在循环比较大的程
[VB.NET]VB.net中的Do
Events
()问题
<script type="text/javascript"
处理消息队列中的所有
Windows
消息
关于
Windows
消息队列,相信屏幕前的你,必定多少了解一下 那
Windows
是如何处理消息中的消息队列的呢 我们提到如下关键类
Application
Application
.Do
Events
Method,微软中的的解释为:处理当前在消息队列中的所有
Windows
消息。 示例 下面的代码示例演示如何使用Do
Events
方法。当示例运行时,用户可以从中OpenFil...
C#
111,129
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章