[C#] 在 GUI 中执行异步操作

在 GUI 中执行异步操作

目录

一、在 GUI 程序中执行异步操作

  下面通过窗体示例演示以下操作-点击按钮后:①将标签内容改成:“Doing”,并将按钮禁用(表示执行中);②线程挂起3秒(模拟耗时操作);③将标签内容改为:“Complete”,并启用按钮(表示执行完成);

 1     public partial class Form1 : Form
 2     {
 3         public Form1()
 4         {
 5             InitializeComponent();
 6         }
 7
 8         private void btnDo_Click(object sender, EventArgs e)
 9         {
10             btnDo.Enabled = false;
11             lblText.Text = @"Doing";
12
13             Thread.Sleep(3000);
14
15             btnDo.Enabled = true;
16             lblText.Text = @"Complete";
17         }
18     }

  可是执行结果却是:

图1-1

  发现的问题:好像没有变成“Doing”,并且拖到窗口的时候卡住不动了,3秒后突然变到想拖动到的位置,并且文本变成“Complete”?

  【分析】GUI 程序在设计中要求所有的显示变化都必须在主 GUI 线程中完成,如点击事件和移动窗体。Windows 程序时通过 消息来实现,消息放入消息泵管理的消息队列中。

图1-2 点击事件

图1-3 点击事件具体执行过程



【原文地址】http://www.cnblogs.com/liqingwen/p/5877042.html

时间: 2024-12-19 18:50:13

[C#] 在 GUI 中执行异步操作的相关文章

[转]C# 线程知识--使用Task执行异步操作

C# 线程知识--使用Task执行异步操作 ??????在C#4.0之前需要执行一个复杂的异步操作时,只能使用CLR线程池技术来执行一个任务.线程池执行异步任务时,不知道任务何时完成,以及任务的在任务完成后不能获取到返回值.但是在C#4.0中引人了一个的任务(System.Threading.Tasks命名空间的类型)机制来解决异步操作完成时间和完成后返回值的问题. 1.使用Task类创建并执行简单任务 ??? 通过使用Task的构造函数来创建任务,并调用Start方法来启动任务并执行异步操作.

C# 线程知识--使用Task执行异步操作

来源:https://www.cnblogs.com/pengstone/archive/2012/12/23/2830238.html 在C#4.0之前需要执行一个复杂的异步操作时,只能使用CLR线程池技术来执行一个任务.线程池执行异步任务时,不知道任务何时完成,以及任务的在任务完成后不能获取到返回值.但是在C#4.0中引人了一个的任务(System.Threading.Tasks命名空间的类型)机制来解决异步操作完成时间和完成后返回值的问题. 1.使用Task类创建并执行简单任务 通过使用T

在java的GUI中暂停、继续其他线程的方法

在java GUI中,如果想通过某个按钮或其他用户可交互控控制件主线程之外的线程的暂停和继续,怎么办呢?这是我想到的一个办法. 这里提供一个java API文档链接:http://docs.oracle.com/javase/8/docs/api/index.html.参考里面的java.lang包中的Thread类,此类的suspend不推荐,用着方法是不安全的.其实每个对象都有一个wait()反法,我们就用这个方法. 自己建立一个类继承Thread类,里面定义两个变量: 1 public O

C#执行异步操作的几种方式比较和总结

原文出处: Durow(@Durow)   欢迎分享原创到伯乐头条 0×00 引言 之前写程序的时候在遇到一些比较花时间的操作例如HTTP请求时,总是会new一个Thread处理.对XxxxxAsync()之类的方法也没去了解过,倒也没遇到什么大问题.最近因为需求要求用DevExpress写界面,跑起来后发现比Native控件效率差好多.这才想到之前看到的“金科玉律”:不要在UI线程上执行界面无关的操作,因此集中看了下C#的异步操作,分享一下自己的比较和总结. 0×01 测试方法 IDE:VS2

.NET中的异步操作及线程同步

执行异步操作 CLR使用了WIN的线程处理能力,但保留了与其分离的权利.某些时候CLR的线程与Win的线程不是完全的匹配. 线程的系统开销较大,应限制其数量. 创建:分配并初始化一线程内核对象,保留1M的地址空间(用户模式),12KB的堆栈(内核模式),然后调用DLL函数通知进程中所有DLL操作来通知所有DLL操作又有一新的线程了. 销毁:进程中所有DLL收到一个死亡通知,且释放资源.且当仅有一个CPU时,每隔20ms执行一次上下文切换. CLR线程池. 每个进程一个,被该进程内的所有APP域共

C# 线程知识--使用ThreadPool执行异步操作

C# 线程知识--使用ThreadPool执行异步操作 在应用程序中有许多复杂的任务,对于这些任务可能需要使用一个或多个工作线程或I/O线程来协作处理,比如:定时任务.数据库数据操作.web服务.文件的处理等.这些任务可能会非常耗费时间,为了是用户界面能及时响应,就会启用一个其他线程来并行处理任务.线程的创建和销毁操作是非常昂贵的,过多的线程会带来内存资源的消耗以及操作系统调度可执行线程并执行上下文切换导致的时间消耗,所以过多线程会损坏应用程序的性能.如果创建过的线程能反复使用就能解决上面的一些

ubuntu中执行定时任务crontab

今天研究了下ubuntu里的crontab内置指令.这是设置定时执行脚本任务的指令,我先测试了下最基础的执行. 第一次使用crontab 时,会出现 no crontab for root - using an empty one "Select a editor ......"下面有几个选项,就是叫你选择编辑器.(选vim)就可以了,我选的第三个. 但是如果你选错了,就可能会遇到点麻烦,没有办法正常编辑,crontab -e. 怎么办? 执行这个命令:select-editor  (

.net(C#)在Access数据库中执行sql脚本

自己写的一个工具类,主要是业务场景的需要. 主要有两个功能: ①执行包含sql语句的字符串 ②执行包含sql语句的文件 调用方式 1 /// <summary> 2 /// 执行sql语句 3 /// </summary> 4 /// <param name="sql">需要执行的sql语句</param> 5 public bool ExecuteSql(string sql, ref string errorMsg) 6 { 7 Se

C# Winform中执行post操作并获取返回的XML类型的数据

/// <summary> /// 返回指定日期的订单数据 /// </summary> /// <param name="StartDate">起始日期</param> /// <param name="EndDate">结束日期</param> /// <returns>DataTable</returns> public System.Data.DataTable