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卡顿假死问题的更多相关文章

  1. flutter输入颜色枚举卡顿假死

    AndroidStudio 3.3.2 遇到 flutter输入颜色枚举卡顿假死,目前没好的解决方案,可以设置显示时间或者关闭popup窗口显示文档,这样就不会卡顿了 下面示例代码在输入 Colors ...

  2. C# WinForm 异步执行耗时操作并将过程显示在界面中

    private void button3_Click(object sender, EventArgs e)        {            RunAsync(() =>         ...

  3. 性能优化九之UI卡顿分析

    在前一篇博客中提到内存抖动和耗时复杂的计算会导致UI卡顿. 那为什么内存抖动会导致UI卡顿呢? 其实在 性能优化一之内存与垃圾回收器 这篇文章中已经有所提及. 这里来详细说明一下: 渲染功能是应用程序 ...

  4. Android异常与性能优化相关面试问题-ui卡顿面试问题详解

    UI卡顿原理: “60fps(Frames Per Second每秒传输帧数) ----> 16ms” 针对上面标红的数字,下面具体说明一下:最主要的根源在于渲染性,Android会每隔16ms ...

  5. RxJava2-后台执行耗时操作,实时通知 UI 更新(一)

    一.前言 接触RxJava2已经很久了,也看了网上的很多文章,发现基本都是在对RxJava的基本思想介绍之后,再去对各个操作符进行分析,但是看了之后感觉过了不久就忘了. 偶然的机会看到了开源项目 Rx ...

  6. android UI卡顿问题学习

    转自https://blog.csdn.net/joye123/article/details/79425398 https://blog.csdn.net/zhenjie_chang/article ...

  7. ASP.NET服务器端执行耗时操作的工作记录

    公司之前有这样一个业务需求: 一名同事做出文件a0和b0,然后将a0加密为a1.b0加密为b1:再将文件a0.a1.b0和b1上传至服务器M:同时要将服务器N上的数据表添加一条记录,该记录的ID就是前 ...

  8. Parallel 类并行任务(仅仅当执行耗时操作时,才有必要使用)

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  9. windows升级到1607后操作很卡顿的解决办法

    CPU I5,固态128G,win7主系统,WIN10和WIN7都安装在固态硬盘上. 未升级之前,操作很流畅,以至于把家里的老古董电脑也换固态,系统换WIN10了.自从升级了1607后这个问题就出现了 ...

随机推荐

  1. C 设计模式:装饰模式

    最近在公司分享了下C语言版的设计模式,记录一下吧. 参考:<设计模式之禅>中“装饰模式”章节. 上面书中是用C++来实现的,我使用了书中的例子,改用C语言来实现. 一.基础知识 面向对象最 ...

  2. 机器学习基础环境的安装与使用(MAC版)

    使用到Matplotlib.Numpy.Pandans等库 1.创建虚拟环境 >>>> sudo pip3 install virtualenv >>>> ...

  3. IDEA 自动生成Hibernate实体类和Mapping文件

    一.新建工程Demo(如果选的时候勾选了hibernate,IDEA会自动下载Hibernate包,不需要手动导入) 二.导入相关包 Mysql && Hibernate 三.添加Hi ...

  4. Unity对象池的实现

    对象池是一个单例类: using System.Collections; using System.Collections.Generic; using UnityEngine; public cla ...

  5. 在word中批量更改Mathtype公式的格式

    方法参照下面这个链接 还有这个方法

  6. 二、Windows 下 ShellCode 编写初步

    第二章.Windows 下 ShellCode 编写初步 (一)shellcode 定义:最先的 Shell 指的是人机交互界面,ShellCode 是一组能完成我们想要的功能的机器代码,通常以十六进 ...

  7. 使用min-device-pixel-ratio媒体功能实现真正的1像素border

    关于设备像素比的知识,想必做过移动端开发的都有接触,这里就不介绍啦,万一有不懂的可以看张鑫旭大神的设备像素比devicePixelRatio简单介绍 由于设备像素比存在的原因,我们在处理设计图的一些边 ...

  8. new和malloc

    1.申请的内存所在位置 自由存储区(free store)是C++基于new操作符的一个抽象概念,凡是new进行内存申请,该内存为自由存储区.堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于 ...

  9. Springboot整合Mybatis-puls

    Spring boot对于我来说是一个刚接触的新东西,学习过程中,发现这东西还是很容易上手的,Spring boot没配置时会默认使用Spring data jpa,这东西可以说一个极简洁的工具,可是 ...

  10. curl请求

    <?php $cookie_file = tempnam('./temp','cookie');  //创建cookie文件保存的位置/** * [curl description] * @pa ...