1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Data.SqlClient;
  10. using System.Text.RegularExpressions;
  11. using System.Threading;
  12. using System.Globalization;
  13. using System.Web;
  14.  
  15. namespace Redis_AddData
  16. {
  17. public partial class Form1 : Form
  18. {
  19. public Form1()
  20. {
  21. InitializeComponent();
  22. label1.Text = "";
  23. }
  24. int maxSize = ; //
  25. int minSize = ;
  26. int currentIndex = ;
  27. public static string tableName = "FA";
  28.  
  29. private void button1_Click(object sender, EventArgs e)
  30. {
  31. button1.Enabled = false;
  32.  
  33. Thread trs = new Thread(new ThreadStart(dofor));
  34. trs.IsBackground = true;
  35. trs.Start();
  36.  
  37. progressBar1.Minimum = minSize;
  38.  
  39. string sql = "select count(id) from tablea ";
  40. maxSize = Convert.ToInt32(databind.GetSingle(sql));
  41. progressBar1.Maximum = maxSize;
  42. }
  43.  
  44. public void dofor()
  45. {
  46. SetLableText("数据加载中...");
  47. currentIndex = minSize;
  48. string str = "";
  49. string sql = "select * from tablea";
  50.  
  51. SqlDataReader dr = databind.GetExecuteReader(sql, false);
  52. DataTable Mydt = attribute.GetTableSchema();
  53. while (dr.Read()) //读取所有记录
  54. {
  55. CompareInfo Compare = CultureInfo.InvariantCulture.CompareInfo; //设置indexof 不区分大小写
  56. #region 设置显示的标签进度
  57. SetLableText(string.Format("当前行:{0},剩余量:{1},完成比例:{2}%", currentIndex, maxSize - currentIndex,
  58.  
  59. (Convert.ToDecimal(currentIndex - minSize) / Convert.ToDecimal(maxSize - minSize) * ).ToString("f0")));
  60.  
  61. SetPbValue(currentIndex);
  62. #endregion
  63.  
  64. ...
  65.  
  66. this.BeginInvoke(new MethodInvoker(delegate()
  67. {
  68.  
  69. button1.Enabled = false;
  70. textBox1.Text = str;
  71. }));
  72.  
  73. }
  74. currentIndex++;
  75. }
  76.  
  77. attribute.BulkToDB(Mydt);
  78.  
  79. this.BeginInvoke(new MethodInvoker(delegate()
  80. {
  81.  
  82. button1.Enabled = true;
  83. textBox1.Text = "完成";
  84. }));
  85.  
  86. }
  87. delegate void labDelegate(string str);
  88.  
  89. private void SetLableText(string str)
  90. {
  91.  
  92. if (label1.InvokeRequired)
  93. {
  94. Invoke(new labDelegate(SetLableText), new string[] { str });
  95. }
  96.  
  97. else
  98. {
  99. label1.Text = str;
  100. }
  101. }
  102. delegate void pbDelegate(int value);
  103.  
  104. private void SetPbValue(int value)
  105. {
  106.  
  107. if (progressBar1.InvokeRequired)
  108. {
  109.  
  110. Invoke(new pbDelegate(SetPbValue), new object[] { value });
  111.  
  112. }
  113.  
  114. else
  115. {
  116.  
  117. progressBar1.Value = value;
  118.  
  119. }
  120.  
  121. }
  122. }
  123. }

winform开线程,避免页面假死的更多相关文章

  1. WPF非UI线程访问网络资源造成页面假死现象

    公司内部一个项目是用WPF作为GUI 访问web接口的形式获取数据, 但是由于数据量比较大,也没做分页,于是就需要一个loading的控件,网上查了很多资料但都比较浅.这里完成需求后,总结一下. 首先 ...

  2. WinForm查询大数据界面假死,使用异步调用解决

    用DataGridView无分页绑定一个几千条数据的查询,查询的时候界面直接卡死十几秒,用户体验非常不好,因此用异步操作解决界面卡死的问题原本场景:点击[查询]后,界面直接卡死优化场景:点击[查询]后 ...

  3. 谈.Net委托与线程——解决窗体假死

    转自:http://www.cnblogs.com/smartls/archive/2011/04/08/2008981.html#2457370   引言 在之前的<创建无阻塞的异步调用> ...

  4. winform程序内存不足或假死的问题

    最近一直在写一个winform程序,对各类文档文件,以及压缩包的内容进行关键字检测. 模型出来之后,执行了一下,发现连续测试后,会有内存不足的问题,导致程序面假死.脑袋懵逼了两天. 回头看我的变量容器 ...

  5. 导出excel页面假死

    如果是asp.net页面 public override void VerifyRenderingInServerForm(Control control)    {} 如果是Sharepoint w ...

  6. WinForm多线程+委托防止界面假死

    当有大量数据需要计算.显示在界面或者调用sleep函数时,容易导致界面卡死,可以采用多线程加委托的方法解决 using System; using System.Collections.Generic ...

  7. C# Winform 窗体界面”假死”后台线程阻塞 解决办法–BeginInvoke

    原文:C# Winform 窗体界面"假死"后台线程阻塞 解决办法–BeginInvoke 这个方法可以用在任何后台任务耗时较长,造成界面“假死”界面控件不更新的情况. 比如要要执 ...

  8. C# winform窗体假死

    C#  winform窗体假死 我们经常会遇到当执行一个比较大的函数时,窗体会出现假死的现象,给用户的体验不是很好,于是我们遇到了问题,那么就必须解决,我们该如何解决呢,首先在自己的脑里画个问号,接下 ...

  9. WinForm程序界面假死,寻求完美解决方案

    故事的开端是这样的,小白是一个程序员,他确实也是一个小白,目前还在程序员发展的道路上,兢兢业业的小心求学. 有一天,小白接到一个任务,完成一个Winform程序,附加一个功能就是可以读IC卡. 小白终 ...

随机推荐

  1. 联想E430Cwindow8系统换成win7

    垃圾win8系统各种不习惯,尤其无线网络老是自己断掉,忍无可忍只能换成win7,之前换过一次,没有成功,记得是提示硬盘模式要由GPT换成MBR. 这次换系统采用了PE里直接分区,格式化所有数据,然后g ...

  2. hadoop集群安装

    首现非常感谢 虾皮(http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html) 安装过程是参照他的<Hadoop集群(第5期 ...

  3. JavaScript 面向对象编程(三)如何写类和子类

    在JavaScript面向对象编程(一)原型与继承和JavaScript面向对象编程(二)构造函数和类中,我们分别讨论了JavaScript中面向对象的原型和类的概念.基于这两点理论,本篇文章用一个简 ...

  4. 抛掉kendoUI的MultiSelect,自己实现 DropDownList MultiSelect

    我们首先来看下kendoUI官方的下拉框多选: 再来看看telerik RadControls的下拉框多选: 很明显从展现形式上来看,第二种是优于第一种的,至少我是这么认为的 :-) 那我们就对Dro ...

  5. 方法输出C++输出斐波那契数列的几种方法

    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 定义: 斐波那契数列指的是这样一个数列:0, 1, 1, 2, 3, 5, ...

  6. Android插件简介

    /** * @actor Steffen.D * @time 2015.02.06 * @blog http://www.cnblogs.com/steffen */ Android插件简介 Andr ...

  7. 【转】HTTP Response Header 的 Content-Disposition

    因为听到有同事讨论JSP输出Excel文件的,就是在页面上有一个[导出]按钮,能够将查询结果导出到Excel文件让用户下载.有人说要用POI在后台生成临时的Excel文件,然后通过读取FileStre ...

  8. Oracle基础学习(一)常用函数

    1.绝对值:abs() select abs(-2) value from dual; 2.取整函数(大):ceil() select ceil(-2.001) value from dual;(-2 ...

  9. 理解LinkedHashMap

    转自http://uule.iteye.com/blog/1522291   1. LinkedHashMap概述: LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输 ...

  10. OC之OC与C的比较

    1. 从编写.编译.链接的流程. 1). 创建1个.m的源文件. 2). 在这个文件中写上符合OC语法规范的源代码. 3). 编译. a. 预编译: 执行预处理代码. b. 检查语法. c. 生成目标 ...