`

Application.DoEvent使用(转载)

 
阅读更多
Application.DoEvent使用(转载)//msdn,有这样一个例子:
private void InitializePictureBox()
{
	this.pictureBox1 = new System.Windows.Forms.PictureBox();
	this.pictureBox1.BorderStyle = 
		System.Windows.Forms.BorderStyle.FixedSingle;
	this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
	this.pictureBox1.Location = new System.Drawing.Point(72, 112);
	this.pictureBox1.Name = "pictureBox1";
	this.pictureBox1.Size = new System.Drawing.Size(160, 136);
	this.pictureBox1.TabIndex = 6;
	this.pictureBox1.TabStop = false;
}

private void InitializeOpenFileDialog()
{
	this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();

	// Set the file dialog to filter for graphics files.
	this.openFileDialog1.Filter = 
		"Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|" + 
		"All files (*.*)|*.*";

	// Allow the user to select multiple images.
	this.openFileDialog1.Multiselect = true;
	this.openFileDialog1.Title = "My Image Browser";

}

private void fileButton_Click(System.Object sender, System.EventArgs e)
{
	openFileDialog1.ShowDialog();
}


// This method handles the FileOK event.  It opens each file 
// selected and loads the image from a stream into pictureBox1.
private void openFileDialog1_FileOk(object sender, 
									System.ComponentModel.CancelEventArgs e)
{

	this.Activate();
	string[] files = openFileDialog1.FileNames;

	// Open each file and display the image in pictureBox1.
	// Call Application.DoEvents to force a repaint after each
	// file is read.        
	foreach (string file in files )
	{
		System.IO.FileInfo fileInfo = new System.IO.FileInfo(file);
		System.IO.FileStream fileStream = fileInfo.OpenRead();
		pictureBox1.Image = System.Drawing.Image.FromStream(fileStream);
		Application.DoEvents();
		fileStream.Close();

		// Call Sleep so the picture is briefly displayed, 
		//which will create a slide-show effect.
		System.Threading.Thread.Sleep(2000);
	}
	pictureBox1.Image = null;
}


在private void openFileDialog1_FileOk方法中使用了此方法,况且在紧跟其后有个延时,延时了2秒,不明白此句的用意。多次运行程序发现使用了Application.DoEvent()后图片能够实时显示,文件框在隔2秒后关闭,屏蔽Application.DoEvent()后发现图片不能实时显示,在隔两秒文件框关闭时显示图片。此时明白了Application.DoEvent()的用意,是使界面能够实时刷新,感觉有点多线程的意思。

继续查资料查看对此语句的详细介绍,下面是从别人博客中摘抄的:
简介:
其实doEnvents很简单,就是暂停一下当前模块Code,好让你程序可以响应其它事件、消息……  
响应完其它事之后又回去继续执行刚才的Code  (允许窗体在忙时响应 UI 输入)

生动描述:
程序对CPU说,哥们,你去干别的事情吧

好处或意义:
全部显示,处理当前在消息队列中的所有Windows消息.
在大量循环中使用可以有效避免假死机现象

注意:
调用该方法可以在某消息引发事件时导致重新输入代码.

额外了解:
Window窗体运行机制:
当运行Windows窗体时,它将创建新窗体,然后该窗体等待处理事件
该窗体在每次处理事件时,均将处理与该事件关联的所有代码。
所有其他事件在队列中等待。
在代码处理事件时,应用程序并不响应。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xochenlin/archive/2008/10/31/3187129.aspx

当我们在事件里面进行大量的循环操作时,windows将等待循环结束。此时界面是得不到响应的。为了在WinForm界面上实时地显示每次循环得到的结果,可以用.net提供的Application.DoEvents();
分享到:
评论

相关推荐

    C# Application.DoEvents() 防界面假死例子。

    在.NET框架中,`System.Windows.Forms.Application.DoEvents()` 方法是一个非常特殊的函数,它将控制权暂时交给Windows消息队列,处理任何等待处理的事件。当程序执行耗时的操作(如数据库查询或大型文件处理)时,...

    C#中的doevent

    但是,需要注意DoEvent的使用场景和限制,以便更好地使用。 在实际应用中,DoEvent可以用在以下场景: 1. 耗时操作:在耗时操作中调用DoEvent,可以防止界面停止响应。 2. 实时响应:DoEvent可以实时响应文本框中...

    广联达delphi笔试题

    - 在 Delphi 中,当需要应用程序在处理其他任务的同时也能响应用户操作时,使用 `Application.DoEvents` 可以确保应用程序保持响应状态。 #### 题目三:ListBox 和 ComboBox 更新技巧 1. **问题:**在 Delphi 中...

    WPFC#.net 跨线程更新UI 线程测试 解决界面卡死

    虽然使用Dispatcher.Invoke 和模拟winform 里面的DoEvent 但是运行中关闭还是会有异常,而且耗资源高; 第二种 : DispatcherTimer 失败:UI还是会卡顿; 第三种 : Timer 建议使用、资源占用少,关闭启动自如。

    消息循环重载实例doevents

    这时,可以借鉴VB的`doevents`思想,通过调用`Sleep(0)`或`Application::ProcessMessages()`(如果是MFC环境)来短暂地让出控制权,使GUI能够处理任何积压的事件。 以下是一个简化的示例,展示了如何在执行长时间...

    多线程事件处理

    例如,在Java中,可以使用`SwingUtilities.invokeLater()`方法来在事件调度线程(也就是主线程)上安全地更新UI;在Python的Tkinter库中,可以使用`after()`方法来安排在主线程的事件循环中执行函数。 在实际应用中...

    深入了解Java接口回调机制

    在Java中,实现回调机制的方式有多种,但最常见的方式是使用接口回调。我们可以创建一个回调接口,例如: ```java public interface CallBack{ public void doEvent(); } ``` 然后,我们可以创建一个实现这个接口...

    pb真正的多线程,用createthread创建的多线程.rar

    3. **异步事件处理**:虽然不是直接的多线程,但PB提供了异步事件机制,通过调用`DoEvent`函数,可以在不阻塞主线程的情况下处理后台任务。 在“scanning”这个压缩包文件名中,可能暗示了这个示例代码涉及的多线程...

    DoEvents可以让程序在执行操作的同时仍可以处理其他事件

    标题中的“DoEvents”是一个在Visual Basic (VB) 和某些其他Microsoft开发环境中广泛使用的函数,它的主要作用是在程序执行长时间运行任务时,允许系统处理其他的事件。这在编程中尤其重要,因为它能确保用户界面...

    eyzftjc.zip_模式识别(视觉/语音等)_Visual_C++_

    1. `doevent.m`:这可能是处理事件的函数,例如用户交互或系统事件,在图形用户界面(GUI)应用中常见。 2. `editsets.m` 和 `editbase.m`:可能涉及到数据编辑和管理功能,可能包括数据输入、修改和保存操作。 3. `...

    quick-x部分教程

    之后,你可以使用 `doEvent` 方法触发状态转换,例如 `fsm:doEvent("warn")` 将状态从 "green" 转换到 "yellow"。同时,状态机还提供了 `isReady`、`getState`、`isState`、`canDoEvent`、`cannotDoEvent`、`...

    C/C++百行代码实现热门游戏消消乐功能的示例代码

    这个过程在`doEvent`函数中完成。 ```cpp if (e.type == Event::MouseButtonPressed) { if (e.key.code == Mouse::Left) { click++; pos = Mouse::getPosition(*window) - offset; } } ``` 3. **方块交换**:...

    excel-vb常用词汇252个

    #### Doevent 事件发生 `DoEvents`语句用于让程序暂时放弃CPU控制权,允许其他事件(如用户输入)被处理。 #### Doloop 循环跳 `Do...Loop`结构用于创建循环,可以根据不同的条件无限次或有限次地重复执行某段代码...

    Eathena脚本编写规则

    - **monster/areamonster/killmonster/killmonsterall/doevent/donpcevent**:用于召唤、杀死怪物和触发事件。例如,`monster monster_name;` 在当前位置召唤怪物 `monster_name`。 这些指令使游戏世界变得更加生动...

Global site tag (gtag.js) - Google Analytics