Winform 界面执行耗时操作--UI卡顿假死问题
UI卡顿假死问题
误区1:使用不同的线程操作UI控件和耗时操作(即,跨线程操作UI控件CheckForIllegalCrossThreadCalls = false;),
注意:此处只是为了记录......
原始同步操作如下所示:
private void button1_Click(object sender, EventArgs e)
{
Waintting waitting = new Waintting();
waitting.Show();
Thread.Sleep(5000);//模拟等待
MessageBox.Show("连接数据库成功", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
waitting.BeginInvoke((Action)waitting.Close);//BeginInvoke方法返回UI线程更新UI界面控件的机制。
}
调整后异步方式如下所示:
private void btnWatting_Click(object sender, EventArgs e)
{
Waintting waitting = new Waintting();
waitting.Show();
Task.Factory.StartNew(() => // 将阻塞线程的操作在另外一个线程中执行,这样就不会堵塞UI线程。
{
Thread.Sleep(5000);//模拟等待
MessageBox.Show("连接数据库成功", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
waitting.BeginInvoke((Action)waitting.Close);//BeginInvoke方法返回UI线程更新UI界面控件的机制。
}); }
运行效果如下所示:

方式二:异步回调
private void WattingTest2_Click(object sender, EventArgs e)
{
Func<string> wait = () =>
{
Thread.Sleep(5000);//模拟耗时操作,例如数据库操作等
return "abc";
};
wait.BeginInvoke(new AsyncCallback(result =>
{
string rst = wait.EndInvoke(result);
this.Invoke((Action)(() => this.textBox1.AppendText(rst)));
}), null);
}
Winform 界面执行耗时操作--UI卡顿假死问题的更多相关文章
- flutter输入颜色枚举卡顿假死
		AndroidStudio 3.3.2 遇到 flutter输入颜色枚举卡顿假死,目前没好的解决方案,可以设置显示时间或者关闭popup窗口显示文档,这样就不会卡顿了 下面示例代码在输入 Colors ... 
- C# WinForm 异步执行耗时操作并将过程显示在界面中
		private void button3_Click(object sender, EventArgs e) { RunAsync(() => ... 
- 性能优化九之UI卡顿分析
		在前一篇博客中提到内存抖动和耗时复杂的计算会导致UI卡顿. 那为什么内存抖动会导致UI卡顿呢? 其实在 性能优化一之内存与垃圾回收器 这篇文章中已经有所提及. 这里来详细说明一下: 渲染功能是应用程序 ... 
- Android异常与性能优化相关面试问题-ui卡顿面试问题详解
		UI卡顿原理: “60fps(Frames Per Second每秒传输帧数) ----> 16ms” 针对上面标红的数字,下面具体说明一下:最主要的根源在于渲染性,Android会每隔16ms ... 
- RxJava2-后台执行耗时操作,实时通知 UI 更新(一)
		一.前言 接触RxJava2已经很久了,也看了网上的很多文章,发现基本都是在对RxJava的基本思想介绍之后,再去对各个操作符进行分析,但是看了之后感觉过了不久就忘了. 偶然的机会看到了开源项目 Rx ... 
- android UI卡顿问题学习
		转自https://blog.csdn.net/joye123/article/details/79425398 https://blog.csdn.net/zhenjie_chang/article ... 
- ASP.NET服务器端执行耗时操作的工作记录
		公司之前有这样一个业务需求: 一名同事做出文件a0和b0,然后将a0加密为a1.b0加密为b1:再将文件a0.a1.b0和b1上传至服务器M:同时要将服务器N上的数据表添加一条记录,该记录的ID就是前 ... 
- Parallel 类并行任务(仅仅当执行耗时操作时,才有必要使用)
		using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ... 
- windows升级到1607后操作很卡顿的解决办法
		CPU I5,固态128G,win7主系统,WIN10和WIN7都安装在固态硬盘上. 未升级之前,操作很流畅,以至于把家里的老古董电脑也换固态,系统换WIN10了.自从升级了1607后这个问题就出现了 ... 
随机推荐
- classPath与PATH
			PATH是window的变量,而不是Java的变量: 通常配置PATH路径是为了找到需要的XX.exe命令,而且配置在用户的变量下面: 例如:JDK中的javac与java命令在cmd中使用,需要把命 ... 
- bottle.py中的路由搜索优化
			# Now search regexp routes # ROUTES_REGEXP是一个字典,键是请求方法,值是[路由, 处理函数]的列表 # 例如:{"GET", [[路由1, ... 
- java面向对象编程--Josephu问题(丢手帕问题)
			Josephu问题为:设编号为1,2,...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推 ... 
- 07_mysql常用sql语句
			一.数据库相关 1.创建数据库: mysql> create database test default character set utf8 collate utf8_general_ci;Q ... 
- Spring框架:@ResponseBody 中文乱码----------我的主题站内单点登录
			问题背景 本文并不是介绍@ResponseBody注解,也不是中文乱码问题的大汇总笔记,这些网上都有很多内容了.这边仅对几年前,一个卡壳了挺久时间的问题的解决过程做一个记录,以警惕自己,达到自醒得目的 ... 
- PHP之魔术方法
			PHP中的魔术方法: PHP的魔术方法主要是在特定的条件下执行相应的魔术方法.这和很多框架中的钩子函数有些类似,不同的是,钩子函数是在生命周期的某个周期内自动执行,而魔术方法是在触发某种条件下自动 ... 
- 20164322 韩玉婷-----Exp6 信息搜索与漏洞扫描
			1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具 ... 
- Linux压缩和解压缩
			1.tar.gz tar.gz这种格式是Linux下使用得最多的压缩格式.它在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率. tar -zcvf archive_name.tar.gz ... 
- java第二章总结与感想
			本章主要介绍Java程序设计环境,下面一节一节的记录: 2.1 安装java工具箱(JDK): 2.1.1, 下载JDK: 这一节主要介绍了以下知识点: (1)jdk的下载地址: (2)一些java术 ... 
- javascript第一个作业之网页计算器
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
