本文转自:http://dotnet.chinaitlab.com/CSharp/801729.html

背景

  在用Windows Form编程时候,我们通常会遇到如此问题:

  1. 后台更新大量处理数据过程。

  2.需要把后台的Log输出到前端,以监控运行状态。

  3. 如果运行大量处理过程,前端会出现白屏状态,这样对用户不友好。

  针对此,我们需求创建多线程来处理后台。用多线程调用处理,按平常处理,是不能更新主线程的控件的,需要做特殊处理。

  代码程序如下:

  using System;

  using System.Collections.Generic;

  using System.ComponentModel;

  using System.Data;

  using System.Drawing;

  using System.Linq;

  using System.Text;

  using System.Windows.Forms;

  using System.Threading;

  namespace TestWinForm

  {

  public partial class Form1 : Form

  {

  delegate void SetValueCallback(int value);

  public Form1()

  {

  InitializeComponent();

  }

  private void btnRun_Click(object sender, EventArgs e)

  {

  Thread t = new Thread(new ThreadStart(Foo));

  t.Start();

  }

  private void Foo()

  {

  for (int i = 1; i <= 100; i++)

  {

  Thread.Sleep(100);

  SetProcessBarValue(i);

  SetLabelValue(i);

  }

  }

  private void SetLabelValue(int value)

  {

  // InvokeRequired required compares the thread ID of the

  // calling thread to the thread ID of the creating thread.

  // If these threads are different, it returns true.

  if (this.lblStatus.InvokeRequired)

  {

    SetValueCallback d = new SetValueCallback(SetLabelValue);

    this.Invoke(d, new object[] { value });

  }

  else

  {

    this.lblStatus.Text = value.ToString()+'%';

  }

  }

  private void SetProcessBarValue(int value)

  {

  // InvokeRequired required compares the thread ID of the

  // calling thread to the thread ID of the creating thread.

  // If these threads are different, it returns true.

  if (this.prbStatus.InvokeRequired)

  {

    SetValueCallback d = new SetValueCallback(SetProcessBarValue);

    this.Invoke(d, new object[] { value });

  }

  else

  {

    this.prbStatus.Value = value;

  }

  }

  }

  }

转载于:https://www.cnblogs.com/freeliver54/archive/2010/10/26/1861743.html

[转]多线程更新Processbar相关推荐

  1. DataGridView多线程更新数据的问题的解决办法

    我通过INotifyPropertyChanged接口让DataGridView自动更新显示内容,但在多线程更新的时候,却发生了妙名其妙的问题,DataGridView居然抛出了这样一个异常:Bind ...

  2. P110 课时111.多线程更新UI数据

    import sys import time from PyQt5.QtCore import QThread, pyqtSignal, QDateTime from PyQt5.QtWidgets ...

  3. 【Pyqt5】进度条QProgressBar的使用/多线程更新/按钮美化/图片编码/开机自启动

    前言 诚如标题所见,我在使用Pyqt5进行开发时,先后遇到了上面几个问题.本篇博客就用来记录遇到问题/解决问题的过程,希望能给遇到相同问题的读者一些参考. 项目背景 我的项目是构建一个可视化的交互界面 ...

  4. [转]解决 C#程序, 多线程更新窗体,假死状态

    C#程序, 多线程更新窗体,假死状态 在CSDN论坛上找到了解决办法,有两种: 1.在this.Refresh()后调用Application.DoEvents(); 处理队列消息,以响应鼠标和键盘消 ...

  5. Java线程更新ui_android使用多线程更新ui示例分享

    Android线程涉及的技术有:Handler;Message;MessageQueue;Looper;HandlerThread. 下面看一段在线程中更新UI的代码: public class Ma ...

  6. pg多线程更新会发生死锁_何时用多线程?多线程需要加锁吗?线程数多少最合理?...

    一.什么时候应该使用多线程? 今天看到一个问题,突然有感而发,想聊下这个话题. 不知道大家有没有想过这个问题,就是什么时候我该使用多线程呢?使用多线程就一定会提升系统性能吗? 1.其实是否应该使用多线 ...

  7. pg多线程更新会发生死锁_[C#.NET 拾遗补漏]12:死锁和活锁的发生及避免

    多线程编程时,如果涉及同时读写共享数据,就要格外小心.如果共享数据是独占资源,则要对共享数据的读写进行排它访问,最简单的方式就是加锁.锁也不能随便用,否则可能会造成死锁和活锁.本文将通过示例详细讲解死 ...

  8. 关于EF多线程更新数据的一个报错

    报错信息: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities ...

  9. pyqt5多线程更新ui

    信号传参类型 pyqtSignal()                               #无参数信号 pyqtSignal(int)                             ...

最新文章

  1. linux下好用的软件
  2. 从babel实现es6类的继承来深入理解js的原型及继承
  3. select标签中的选项分组
  4. 数组中有一个数字出现的次数超过数组长度的一半
  5. ASP.Net中OnBeforeUnLoad事件中调用__doPostBack不起作用?
  6. 3分钟看完Build2016 Day 1 Keynote
  7. springCloud - 第7篇 - 配置文件管理中心 ( SpringCloud Config )
  8. [设计模式] ------ 代理模式
  9. 【sqoop】sqoop概念,功能,架构,版本
  10. 更改via浏览器字体_【安卓】我心中的最佳手机浏览器
  11. Python的继承与多继承
  12. 2021东北师范大学计算机技术专业研究生入学复测考试
  13. 6、Nacos服务注册——PushService类功能
  14. linux lefse分析,科学网-linux本地化进行lefse分析-林国鹏的博文
  15. Pygame做一期吃豆子游戏
  16. SQL Server Moebius 集群部署
  17. kali无线破解实战
  18. 不要把别人对你的好,当作是理所当然
  19. react 实现图片的滚动缩放和按住鼠标左键移动图片效果
  20. 从规范看海洋测绘单验潮站的控制距离

热门文章

  1. git如何合并指定文件内容_git小技巧--如何从其他分支merge个别文件或文件夹
  2. c语言字符串初值问题!
  3. 高级程序员值得一看的33本编程书籍
  4. 机器学习-单个感知器实现逻辑或(matlab实现)
  5. 计算机脚本程序编写,实验三-shell脚本程序设计.docx
  6. vue用公共组件页面传值_微信小程序页面传值、组件间通信总结
  7. Java nio 学习笔记 相关知识
  8. JAX-WS Web Service
  9. 恢复被CVS被Override and Update后的代码
  10. 如何判断一个网站是否被百度处罚中