故事的开端是这样的,小白是一个程序员,他确实也是一个小白,目前还在程序员发展的道路上,兢兢业业的小心求学. 有一天,小白接到一个任务,完成一个Winform程序,附加一个功能就是可以读IC卡. 小白终于有机会一展身手了!!不免内心兴奋. 再联系了IC卡厂家,拿到开发SDK后,小白不久就碰到了以下难题: 1.厂家的读卡器是通过API给定的事件ReadCard()驱动的,而读卡器在ReadCard事件驱动以后,可以在往后的3s以内侦测是否有IC卡片在附近: (1)3s内,有IC卡在设备附近,立即读卡…
原文:C# Winform 窗体界面"假死"后台线程阻塞 解决办法–BeginInvoke 这个方法可以用在任何后台任务耗时较长,造成界面“假死”界面控件不更新的情况. 比如要要执行的数据库操作是几十万条的update语句,如果在click事件里阻塞或者做Thread.Sleep或一个耗时很长的操作,窗口就会无响应点不动了.故需要用this.BeginInvoke方法来异步执行UI线程的操作,更新界面显示. //导入按钮点击事件 private void btn_import_Clic…
c#中可以用BeginInvoke去启动异步调用,但是有两个BeginInvoke一个是controller的BeginInvoke还有一个是委托的BeginInvoke. 主要区别是controller的BeginInvoke会返回到主线程中执行.如果在Winform中使用了controller得BeginInvoke去执行一些费时的操作任然会使界面假死. controller的BeginInvoke使用方法是先定义一个委托 如 delegate void UpdateUI(string s)…
用DataGridView无分页绑定一个几千条数据的查询,查询的时候界面直接卡死十几秒,用户体验非常不好,因此用异步操作解决界面卡死的问题原本场景:点击[查询]后,界面直接卡死优化场景:点击[查询]后,界面可以随意移动,感觉不到后台在做大量数据的读取和绑定 private void btnQuery_Click(object sender, EventArgs e) { // 查询按钮点击后,按钮文本由"查询"改为"加载中",并把按钮状态改为不可点击 btnQuer…
QThread的常见特性: run()是线程的入口,就像main()对于应用程序的作用.QThread中对run()的默认实现调用了exec(),从而创建一个QEventLoop对象,由其处理该线程事件队列(每一个线程都有一个属于自己的事件队列)中的事件.简单用代码描述如下: 1 int QThread::exec() 2 { 3 //... 4 QEventLoop eventLoop; 5 int returnCode = eventLoop.exec(); 6 //... 7 return…
C#多线程解决界面卡死问题的完美解决方案 文章转自http://www.sufeinet.com/thread-3556-1-1.html 问题描述: 当我们的界面需要在程序运行中不断更新数据时, 当一个textbox的数据需要变化时, 对于这个问题可以先参考下我的另外一个文章 C#多线程|匿名委托传参数|测试您的网站能承受的压力|附源代码--升级版 为了让程序执行中不出现界面卡死的现像,最好的方法就是多线程来解决 一个主线程来创建界面,使用一个子线程来执行程序并更新主界面 这样就不会出现卡死的…
在目前高分屏流行的情况下,windows缩放与布局仍然设置为100%就显得太小(特别是笔记本),通常会调整为125%或150%, VS在缩放与布局设置为非100%的时候,就会自动启动DPI感知模式,以防止VS界面模糊. 但也会导致一个问题 就是在高DPI下(非100%缩放与布局)设计的winform程序 当拿到不同的缩放条件下运行时就会遇到界面变形或不一致的问题, 我们这里提供了一个解决方案来防止高DPI下设计出的winform程序界面变形(但是不能解决winform程序在高DPI下可能变糊)…
我在做Winform界面的时候,一般都是统一化处理,界面顶部放置一些字段条件供查询,下面就是分页查询列表,展示相关的数据.但有时候碰到一些表字段内容分类比较多,有一些特别重要,如果放在一个树形列表来进行快速分类查询,用户体验应该更好.本篇随笔主要介绍如何快速实现树形列表和分页查询整合的WInform程序界面. 1.标准WInform列表界面 标准的查询条件+列表数据展示的WInform界面如下所示. 这个界面主要就是通过代码生成工具(Database2Sharp)进行初期的Winform界面生成…
一.添加控件IrisSkin2.dll. 方法:         1.右键“工具箱”.“添加选项卡”,取名“皮肤”.         2.右键“皮肤”,“选择项”弹出对话框        3.点击“浏览“,找到IrisSkin2.dll,,next,next,确定.        4.在皮肤里会出现.        5.把SkinEngine拖到设计界面,会出现在下面. 二,把皮肤文件中以ssk为后缀名的文件(如OneGreen.ssk)放在bin文件夹的debug文件夹里. 三,添加代码.  …
http://www.cnblogs.com/Charltsing/p/publisher.html 最近测试task并发任务的效率与线程池的区别,发现了另外一个问题.task建立任务的速度很快,输出到UI的信息过频,导致UI假死. private void TestMakeTasks(object obj) { string msg = ""; //循环创建task for (int i = 0; i < 3000; i++) { //主线程(winform)--子线程(Thr…