Application.DoEvents可能不是线程安全的
2019独角兽企业重金招聘Python工程师标准>>>
如果在UI的消息处理函数中进行较大量的计算或对界面进行操作,占用较长时间时可以在中间调用Application.DoEvents来响应用户操作,但不建议这样做,替代的方法就是在后台线程中进行这些操作,用线程池是一个不错的方法(例如System.Threading.ThreadPool)。
该函数只能在UI的主线程中调用,不不不要在工作线程中调用该函数,否则Application.DoEvents可能挂死永不退出,使用reflector反编译了一下这个函数,发现里面没有使用lock之类的线程锁,可能不是线程安全的,在MSDN的文档中也没有说明该函数是线程安全的,所以一定不要在多个线程中使用它。
一条绝对安全的方法就是:别用它!
具体什么原因可能导致该函数不退出还没有研究出来,有空重现一下。
转载于:https://my.oschina.net/zhuzhufanli/blog/2222167
Application.DoEvents可能不是线程安全的相关推荐
- c# Application.DoEvents
public static void Delay(int ms){int start = System.Environment.TickCount;while (System.Environment. ...
- C#Application.DoEvents();的作用。
Visual Studio里的摘要:处理当前在消息队列中的所有 Windows 消息. 交出CPU控制权,让系统可以处理队列中的所有Windows消息 比如在大运算量循环内,加Application. ...
- 慎用Application.DoEvents( )
如果在UI的消息处理函数中进行较大量的计算或对界面进行操作,占用较长时间时可以在中间调用Application.DoEvents来响应用户操作,但不建议这样做,替代的方法就是在后台线程中进行这些操作, ...
- C# System.Windows.Forms.Application.DoEvents()
cs开发中,有时候界面用线程还是会卡,因为要invoke实时更新窗口,从db读取数据. 用backgroundworker效果不理想,用线程也不理想. 加上这个效果好好多 System.Windows ...
- C# Application.DoEvents() 处理队列消息,防界面假死。
该方法可以处理当前队列的消息,比如一个for循环 5000次 向TextBox中追加文本,那肯定会假死一会儿的. 此时便可使用Application.DoEvents()来处理队列的信息. 简单说下使 ...
- Application.DoEvents()的使用
最近做了一个个人数字图书馆管理系统,因为牵扯到电脑文件的扫描,想做一个实时显示当前扫面文件的功能,就类似于360文件扫描时的效果,本来打算用多线程来实现,但是方法太多没有实现,后来在程序中进行控制,由 ...
- C# Winform中慎用Application.DoEvents
private void Add(){for (int i = 0; i < 100; i++){Button button = new Button();button.Width = 300; ...
- Application.DoEvents
记得第一次使用Application.DoEvents()是为了在加载大量数据时能够有一个数据加载的提示,不至于系统出现假死的现象,当时也没有深入的去研究他的原理是怎样的,结果在很多地方都用上了App ...
- Application.DoEvents();
一直做的是WEB开发,就没有用到过Application.DoEvents();最近搞手机客户端开发,看到代码里面有这个方法不知道是干什么的.搜了哈.分享分享 Application.DoEvents ...
最新文章
- opengl版本发展史及各种概念的厘清
- 内地计算机学校,全球大学计算机实力排名:清北人工智能内地前2
- Android Sdcard 可用空间大小
- Chrome 技术篇-常用web调试技巧清除缓存并硬性重新加载
- JS 清空table
- MySQL数据库(六) 一一 基本操作之事物和索引
- appium python unittest_appium+python+unittest自动化测试
- devops实践指南_开发DevOps的实用指南:减少八卦的步骤
- 贪心算法——洛谷(P1090)[NOIP2004]合并果子
- Windows XP系统文件一一诠释(1)[最新整理](转BY wang6610----BBS.WUYOU.COM)
- [转]语言模型训练工具SRILM
- 移动硬盘中安装ubuntu系统——Vmware Workstation安装
- 银行数据仓库体系实践(8)--主数据模型设计
- VISTA系统常识技巧集锦
- 【计算机组成原理】真值与机器值小数原码与整数原码定义及举例
- 什么是对冲?对冲的作用
- 智慧园区背景 智慧园区如何建设 智慧园区落地实例
- Pikachu靶场通过记录
- AutoCAD ObjectArx 2013 Wizard 安装
- ETH节点调用出现 tx fee (1.30 ether) exceeds the configured cap (1.00 ether)
热门文章
- Python 函数的参数形式
- 杭电OJ(HDU)-ACMSteps-Chapter Three-《FatMouse#39; Trade》《今年暑假不AC》《排名》《开门人和关门人》...
- javascript里的几种常见的数组方法
- 手把手教你crontab排障
- ASP.NET MVC源码分析系列
- 数据库是.frm,.myd,myi备份如何导入mysql (转)
- 运算符重载 - C++快速入门25
- 在线文本并集计算工具
- JavaScript HTML DOM 1
- Android的DatePicker和TimePicker-android学习之旅(三十八)