[转]多线程更新Processbar
本文转自: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相关推荐
- DataGridView多线程更新数据的问题的解决办法
我通过INotifyPropertyChanged接口让DataGridView自动更新显示内容,但在多线程更新的时候,却发生了妙名其妙的问题,DataGridView居然抛出了这样一个异常:Bind ...
- P110 课时111.多线程更新UI数据
import sys import time from PyQt5.QtCore import QThread, pyqtSignal, QDateTime from PyQt5.QtWidgets ...
- 【Pyqt5】进度条QProgressBar的使用/多线程更新/按钮美化/图片编码/开机自启动
前言 诚如标题所见,我在使用Pyqt5进行开发时,先后遇到了上面几个问题.本篇博客就用来记录遇到问题/解决问题的过程,希望能给遇到相同问题的读者一些参考. 项目背景 我的项目是构建一个可视化的交互界面 ...
- [转]解决 C#程序, 多线程更新窗体,假死状态
C#程序, 多线程更新窗体,假死状态 在CSDN论坛上找到了解决办法,有两种: 1.在this.Refresh()后调用Application.DoEvents(); 处理队列消息,以响应鼠标和键盘消 ...
- Java线程更新ui_android使用多线程更新ui示例分享
Android线程涉及的技术有:Handler;Message;MessageQueue;Looper;HandlerThread. 下面看一段在线程中更新UI的代码: public class Ma ...
- pg多线程更新会发生死锁_何时用多线程?多线程需要加锁吗?线程数多少最合理?...
一.什么时候应该使用多线程? 今天看到一个问题,突然有感而发,想聊下这个话题. 不知道大家有没有想过这个问题,就是什么时候我该使用多线程呢?使用多线程就一定会提升系统性能吗? 1.其实是否应该使用多线 ...
- pg多线程更新会发生死锁_[C#.NET 拾遗补漏]12:死锁和活锁的发生及避免
多线程编程时,如果涉及同时读写共享数据,就要格外小心.如果共享数据是独占资源,则要对共享数据的读写进行排它访问,最简单的方式就是加锁.锁也不能随便用,否则可能会造成死锁和活锁.本文将通过示例详细讲解死 ...
- 关于EF多线程更新数据的一个报错
报错信息: Store update, insert, or delete statement affected an unexpected number of rows (0). Entities ...
- pyqt5多线程更新ui
信号传参类型 pyqtSignal() #无参数信号 pyqtSignal(int) ...
最新文章
- linux下好用的软件
- 从babel实现es6类的继承来深入理解js的原型及继承
- select标签中的选项分组
- 数组中有一个数字出现的次数超过数组长度的一半
- ASP.Net中OnBeforeUnLoad事件中调用__doPostBack不起作用?
- 3分钟看完Build2016 Day 1 Keynote
- springCloud - 第7篇 - 配置文件管理中心 ( SpringCloud Config )
- [设计模式] ------ 代理模式
- 【sqoop】sqoop概念,功能,架构,版本
- 更改via浏览器字体_【安卓】我心中的最佳手机浏览器
- Python的继承与多继承
- 2021东北师范大学计算机技术专业研究生入学复测考试
- 6、Nacos服务注册——PushService类功能
- linux lefse分析,科学网-linux本地化进行lefse分析-林国鹏的博文
- Pygame做一期吃豆子游戏
- SQL Server Moebius 集群部署
- kali无线破解实战
- 不要把别人对你的好,当作是理所当然
- react 实现图片的滚动缩放和按住鼠标左键移动图片效果
- 从规范看海洋测绘单验潮站的控制距离