Thread.Sleep太久,界面卡死
在Winform程序的UI界面使用Thread.Sleep,窗体界面会被卡死,如图1所示,程序sleep 5000毫秒,时间到了之后,按钮的名称才更改过来,窗体也能被鼠标拖动。而用Delay方法,就能让窗体在sleep中,也能活动起来,如图2所示。

图一
图二
private void button1_Click(object sender, EventArgs e)
{
//button1.Text = "用Thread...";
//System.Threading.Thread.Sleep(5000);
button1.Text = "用Delay...";
Delay();
} public void Delay(int millSeconds)
{
Stopwatch watch = new Stopwatch(); while (watch.ElapsedMilliseconds < millSeconds)
{
System.Threading.Thread.Sleep(); Application.DoEvents();
} watch.Stop();
}
最主要的就是这个Delay方法,用到一个秒表,之后是一个循环,循环里面的条件是当秒表计时器时间<Delay时间时,用50毫秒作为单位延迟时间,Application.DoEvents()的作用就是:处理所有的当前在消息队列中的Windows消息.这个消息队列大概是你对windows窗体进行的操作按先后顺序的入队.windows窗体维持着一个消息泵,会阻塞式的循环这个队列.参考:http://www.cnblogs.com/blosaa/archive/2013/05/31/3109586.html这篇文章就会明白的.所以当延迟时间很小的时候,这个消息泵不会被阻塞太久,就能及时地响应用户的操作.
Thread.Sleep太久,界面卡死的更多相关文章
- C#多线程解决界面卡死问题
C#多线程解决界面卡死问题的完美解决方案 文章下最方有源码下载 问题描述:当我们的界面需要在程序运行中不断更新数据时, 当一个textbox的数据需要变化时, 对于这个问题可以先参考下我的另外一个文章 ...
- C#多线程解决界面卡死问题的完美解决方案,BeginInvoke而不是委托delegate 转载
问题描述:当我们的界面需要在程序运行中不断更新数据时,当一个textbox的数据需要变化时,为了让程序执行中不出现界面卡死的现像,最好的方法就是多线程来解决一个主线程来创建界面,使用一个子线程来执行程 ...
- 多线程、委托、Invoke解决winform界面卡死的问题,并带开关
一.知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法. Invoke指: 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托.该方法接收一个委托类型和委托的参数,因此需要定义 ...
- C#多线程解决界面卡死问题的完美解决方案
C#多线程解决界面卡死问题的完美解决方案 文章转自http://www.sufeinet.com/thread-3556-1-1.html 问题描述: 当我们的界面需要在程序运行中不断更新数据时, 当 ...
- WPF--Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析
原文地址: http://www.tuicool.com/articles/F7reem http://blog.csdn.net/yl2isoft/article/details/11711833 ...
- Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析
原文:Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析 前段时间,公司同事开发了一个小工具,在工具执行过程中,UI界面一直处于卡死状态. 通过阅读代码发现,主要是 ...
- WPF防止界面卡死并显示加载中效果
原文:WPF防止界面卡死并显示加载中效果 网上貌似没有完整的WPF正在加载的例子,所以自己写了一个,希望能帮到有需要的同学 前台: <Window x:Class="WpfApplic ...
- kafka-connect-hdfs重启,进去RECOVERY状态,从hadoop hdfs拿租约,很正常,但是也太久了吧
虽说这个算是正常现象,等的时间也太久了吧.分钟级了.这个RECOVERY里面的WAL有点多余.有这么久的时间,早从新读取kafka写入hdfs了.纯属个人见解. @SuppressWarnings(& ...
- 双缓冲队列解决WPF界面卡死
工作中的项目,CS客户端会通过MQ接收前端设备发送的信息,之前测试的时候,由于测试的数据不大,没有进行压力测试,软件可以正常工作,随着项目现场设备数量的增加,CS客户端从MQ中订阅的数据量不断增加,最 ...
随机推荐
- CI框架使用(一)
CI框架的使用是很简单,也 是mvc模式.其中有好多类直接调用. 在使用帮助函数的时候,都需要手动加载,或者是在配置文件中加一个自动加载 $this->load->helper('ur ...
- 一路编程 -- Gruntfile.js
<一路编程> Steven Foote 第四章构建工具 中的 Gruntfile.js 文件的 JSHint 部分,如果按照书中所写,run grunt 的命令的时候会出错. 此处附上完 ...
- spring boot 2.0 thymeleaf调试时正常,打包后运行报错. 找不到模板文件.
使用th:fragment 定义模板 使用 th:replace 来添加模板到需要的地方. 使用时发现一个非常奇怪的问题. 本机idea 调试环境一切正常, 但是打成jar包以后报错,提示找不到对 ...
- html、javascript、url特殊字符的转义诠释及使用方法详解
html.javascript.url特殊字符转义在实际编程中都是有用到的,有的人对特殊字符转义的使用不是很清楚,下面就对html,javascript,url特殊字符的转义做一下说明和归纳. htm ...
- Web Scraper 翻页——控制链接批量抓取数据
 这是简易数据分析系列的第 5 ...
- 一张图带你了解webpack的require.context
很多人应该像我一样,对于webpack的require.context都是一知半解吧.网上很多关于require.context的使用案例,但是我没找到可以帮助我理解这个知识点的,于是也决定自己来探索 ...
- django基础知识之分页:
分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据, ...
- 配置Windows server 用户和组权限实验详解
目录 操作步骤如下: 在Windows Server开始菜单下点击管理工具下的计算机管理 新建用户 用户创建完毕 新建文件夹 配置技术部读取"技术资料"和"常用软件&qu ...
- 实现socket的服务和客户端通信
对学习过程中自己敲的一些关于socket有关的代码做了个简单总结,在这分享一下,给有需要的同学借鉴一下. 什么是socket? 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为 ...
- Worker-Thread设计模式
import java.util.Random; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent. ...