C#winform使用进度条

2023-05-16

在用c#做WinFrom开发的过程中。我们经常需要用到进度条(ProgressBar)用于显示进度信息。这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口很容易假死(无法适时看到进度信息)。下面我就简单结合一个我写的例子给大家做一个介绍。
第一步:设计界面不说了...注意需要引用 using System.Threading;
第二步:定义一个代理,用于更新ProgressBar的值(Value)
//更新进度列表
private delegate void SetPos(int ipos);
第三步:进度条值更新函数(参数必须跟声明的代理参数一样)
private void SetTextMessage(int ipos)
{
if (this.InvokeRequired)
{
SetPos setpos = new SetPos(SetTextMessage);
this.Invoke(setpos, newobject[] { ipos});
}
else
{
this.label1.Text = ipos.ToString() + "/100";
this.progressBar1.Value = Convert.ToInt32(ipos);
}
}
第四步:函数实现
privatevoid button1_Click(object sender, EventArgs e)
{
Thread fThread = new Thread(new ThreadStart(SleepT));//开辟一个新的线程
fThread.Start();
}
第五步:新的线程执行函数:
privatevoid SleepT()
{
for (int i = 0; i < 500; i++)
{
System.Threading.Thread.Sleep(100);//没什么意思,单纯的执行延时
SetTextMessage(100 * i / 500);
}
}
=============================
使用浮动进度条
1.浮动窗口
/// <summary>
/// Increase process bar
/// </summary>
/// <param name="nValue">the value increased</param>
/// <returns></returns>
public bool Increase(int nValue)
{
if (nValue > 0)
{
if (prcBar.Value + nValue < prcBar.Maximum)
{
prcBar.Value += nValue;
return true;
}
else
{
prcBar.Value = prcBar.Maximum;
this.Close();
return false;
}
}
return false;
}

2.使用进度的窗口
using System.Threading;
private frmProcessBar myProcessBar = null;
private delegate bool IncreaseHandle(int nValue);
private IncreaseHandle myIncrease = null;

private void ShowProcessBar()
{
myProcessBar = new frmProcessBar();
// Init increase event
myIncrease = new IncreaseHandle(myProcessBar.Increase);
myProcessBar.StartPosition = FormStartPosition.CenterScreen;
myProcessBar.ShowDialog();
myProcessBar = null;
}
private void ThreadFun()
{
MethodInvoker mi = new MethodInvoker(ShowProcessBar);
this.BeginInvoke(mi);
Thread.Sleep(1000);//Sleep a while to show window
bool blnIncreased = false;
object objReturn = null;
do
{
Thread.Sleep(50);
objReturn = this.Invoke(this.myIncrease, new object[] { 2 });
blnIncreased = (bool)objReturn;
}
while (blnIncreased);
}

使用方法:
Thread thdSub = new Thread(new ThreadStart(ThreadFun));
thdSub.Start();

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#winform使用进度条 的相关文章

  • log4net 使用示例 asp.net + winform

    log4net 是 apache org 在 log4j的基础上推出的针对 NET程序的开源的日志组件 log4net目前的最新版本是 1 2 10 xff0c log4net支持的日志保存方式 xff0c 可谓丰富之极 xff0c 包括
  • C# WinForm基础

    1 WinForm基础 Form1 cs using System using System Collections Generic using System ComponentModel using System Data using S
  • winform-日记

    1 Form的属性TopLevel设置为false xff0c 就相当于usercontrol的功能了 xff0c 可以被包含在容器中 xff0c 只不过需要动态在代码中加载 xff0c usercontrol则可拖拽
  • Winform中提提升重绘效率-背景的设置

    backgrounglayout属性设置为none xff0c 否则会影响重绘效率
  • c#中WinForm中拖拽窗体实现移动功能(无边框模态窗体)

    在WindowsForm 应用程序中 如果将窗体的FormBorderStyle属性设置为none 这时 用鼠标拖拽窗体时就无法实现移动的功能了 xff0c 下面就是解决方案 在FormBordeStyle属性设置为none的窗体的后台代码
  • Winform

    自适应窗口布局 OnLayout 窗口在尺寸变化时 会调用OnLayout方法 所以 在form1 cs文件里重写OnLayout方法即可实现自适应 在OnLayout方法中 我们获取一下窗口的宽度和高度 根据窗口的宽度和高度重新设定控件的
  • Winform的控件学习整理篇

    窗体 窗体是整个WinForm的核心 xff0c 在Windows系统上的每一个界面都可以看作是一个窗体 xff0c 只不过其功能各异而已 新建一个空白的窗体 xff1a 窗体常用属性 xff1a name xff1a 窗体的名称 xff0
  • vs2019 winform打开项目不显示界面

    今天 xff0c 遇到一个问题 xff1a 打开其他项目不显示winform的界面 解决方法 xff1a 工具 gt 获取工具和功能 xff0c 在打开的界面选择单个组件 xff0c 在里面找到如下图的组件勾上安装即可
  • Winform datagridview中显示下拉框示例

    方式一 xff1a 如下图所示 xff0c 该方式也是较为简单的一种 你只需要添加一列类型为DataGridViewComboBoxColumn的列 xff0c 然后添加数据源即可 但是我们看到这种方式的下拉列表看起来并不是十分的美观 xf
  • 打造属于自己的正则表达式

    概述 首先需要说明的一点 无论是Winform 还是Webform 都有很成熟的日历控件 无论从易用性还是可扩展性上看 日期的选择和校验还是用日历控件来实现比较好 前几天在CSDN多个版块看到需要日期正则的帖子 所以整理了这篇文章 和大家一
  • winform 中 Devexpress Charts动态添加数据

    参考 Devexpress Charts动态添加数据 https www cnblogs com zhangruisoldier p 4226950 html DevExpress 图表控件 ChartControl 动态绑定数据 http
  • C#winform——添加不同语言环境下的resx,使得显示文本能随语言环境变化

    添加不同语言环境下的resx 添加不同语言resx文件的两种情形 窗体控件 非窗体控件 为窗体控件添加不同语言resx文件 为非窗体控件添加不同语言resx文件 添加不同语言resx文件的两种情形 窗体控件 1 如下所示 需要在不同语言环境
  • WinForm教程(一)App.config等配置文件

    最近又回到用WinForm开发项目 难免少不了跟数据库打交道 平时也会在App config中写连接字串 但没有仔细深究过 当然除了写数据库字串 肯定还能写别的 我们无论在控制台程序还是窗体程序 都会遇见他 乘代码敲累之际 写篇博客平缓下
  • 使用BindingList实现DataGridView的动态绑定

    在DataGridView数据绑定时使用BindingSource中转可以起到很好的控制DataGridView
  • Winform 登录页面创建和设置

    Winform 登录页面设置 自带的Form1进行改造 更换名字为FrmLogin 简单先不放置容器 直接先托两个TextBox 再放两个lable分别改好名字 设置密码框的textbox的PasswordChar设置为 再拖两个普通的bu
  • Winform项目之学生成绩管理系统设计与实现(三)

    1 班级管理 private ClassService classService new ClassService public ListClassForm InitializeComponent this dgvListClass Row
  • 「干货分享」DevExpress常用控件——RichEditControl使用指南

    做WinForms的一般都知道 传统 NET界面有一个RichTextBox控件 这个是一个富文本控件 可以存储图片文字等内容 它有自己的文件格式RTF 在DevExpress控件组里面也有一个同等的控件 他的名字是RichEditCont
  • 【WinForm】WebView2-个性化浏览器-桌面程序开发详解

    这是一个桌面程序上的浏览器 是用插件WebView2开发的浏览器桌面程序 功能体验堪比Edge浏览器 相比使用Chrome内核插件开发浏览器来说 还是用插件WebView2开发来得简单一些 接下来讲一讲实现过程 开发之前 建议先看看微软的
  • visual studio2019(C#/.NET)安装教程

    前言 好久没有跟新版本了 博主还用的2017 看到最新的2019功能还是很强大的 版本可能越高越好 所以博主写了一个详细的博客 希望可以帮助到大家 一 visual studio 2019 下载 1 下载地址 visual studio官方
  • winform记录

    SpeechSynthesizer 下边代码多次调用 会导致内存溢出outofmemory SpeechSynthesizer 需要改为全局静态 private void button Click object sender EventAr

随机推荐

  • 2020.3

    1 项目中引用的dll如果为感叹号 xff0c 编译不能正常进行 xff0c 则将其dll下载放到exe运行文件夹下 xff0c 如还有其他错误提示 xff0c 试试将该dll的嵌入式互操作改为false
  • c#图像灰度化、灰度反转、二值化

    图像灰度化 xff1a 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理 彩色图像中的每个像素的颜色有R G B三个分量决定 xff0c 而每个分量有255中值可取 xff0c 这样一个像素点可以有1600多万 xff08 255 25
  • opencv中查看mat位图的像素幅度(Cv::matStep)

    实例 其中step里的 xff0c 其中数据指针首地址是p 61 0x000000000028d7b0 xff0c 1280是每行数据所占的字节数 xff0c 1是每个元素的字节数 Mat的作用 The class Mat represen
  • vs中c#的项目配置,平台配置

    1 右键项目属性 gt 配置属性 gt 配置 2 一般在此界面的右上角里的配置管理器中配置才有效 3 活动解决方案配置是项目生成的exe路径 xff0c 活动解决方案平台是每个项目对应的cpu架构 4 在主项目中把cpu平台改成啥 xff0
  • vs中c++项目的配置

    首先 xff0c 我们一般不会修改解决方案的属性 xff0c 而是设置每个项目各自的属性 接着上一篇文章 xff0c 我们来看看我们应该怎样来设置各项目的项目属性更好 xff1a 我们以NYOJ 001项目的Debug版的设置为例 xff1
  • 正则表达式校验日期时间格式

    目录 日期部分校验 概念 校验yyyyMMdd 校验yyyy xff0d MM xff0d dd 时间部分校验 校验HHmmss 校验HH mm ss 校验日期 43 时间部分 校验yyyyMMddHHmmss 校验 yyyy MM dd
  • c#利用宏定义调试代码

    define 使用 define 来定义符号 将符号用作传递给 if 指令的表达式时 xff0c 该表达式的计算结果为 true xff0c 如以下示例所示 xff1a define DEBUG 说明 define 指令不能用于声明常量值
  • C++项目库包含,dll引用问题,直接把缺失的dll或库放置可执行文件里

    在c 43 43 的项目中如果设置了库包含于库引用 xff0c 设置了引用或包含的路径 xff0c 如果单拿出debug文件运行里面的exe xff0c 提示报错缺少引用的文件 xff0c 可直接将缺少的文件等放置debug目录下即可运行
  • c#中invoke和beginvoke的区别

    thread th 61 new thread 61 gt control invoke new Action 61 gt thread sleep 5000 dosometings th start 这个线程里的dosometings将在
  • vs项目中在生成中设置exe的输出路径,可定为不同版本

    vs项目中在生成中设置exe的输出路径 xff0c 可定为不同版本 xff0c 便于调试发布
  • c# 深拷贝各种实现方式

    1 xff1a 利用反射实现 public T DeepCopy lt T gt T obj object retval 61 Activator CreateInstance typeof T PropertyInfo pis 61 ty
  • C#序列化与反序列化以及深拷贝浅拷贝方法

    基于二进制数据流的序列化和反序列化 lt summary gt 序列化 lt summary gt lt typeparam name 61 34 T 34 gt lt typeparam gt lt param name 61 34 ob
  • c#中chart绘制曲线,柱状图等

    通常我们需要在界面中绘制波形图 xff0c 柱状图 xff0c 折线图等等 此时用到Chart控件是非常方便的 先以图一条样条曲线 xff08 Spline xff09 为例 xff08 1 xff09 在Visual Studio中新建一
  • c#使用System.Windows.Forms.DataVisualization.Charting.dll绘制图表实例

    首先下载System Windows Forms DataVisualization Charting dll xff0c 然后引用到项目中 手动在代码中创建chart类型并将其添加到某个控件中 xff08 control controls
  • 关于opencv中Mat赋值(浅拷贝,深拷贝)原理

    问题点 xff1a 有两个垫对象 xff1a mat 1和mat 2将mat 2赋值给mat 1 xff08 mat 1 61 mat 2 xff09 后 xff0c 改变mat 1 xff0c mat 2也会被改变 xff08 这里的改变
  • C# 多线程修改控件时遇到:创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke

    一般在多线程调用UI控件时 xff0c 涉及到跨线程修改UI xff0c 需要使用委托 xff0c 比如如下 xff1a this Invoke MethodInvoker delegate btnRefresh Enabled 61 tr
  • LockSupport中的park与unpark原理

    关于LockSupport concurrent包的基础 Doug Lea 的神作concurrent包是基于AQS AbstractQueuedSynchronizer 框架 xff0c AQS框架借助于两个类 xff1a Unsafe
  • 链路聚合LACP

    链路聚合 链路聚合作用 xff1a 增加链路带宽 提高链路可靠性 链路聚合负载分担原理 xff1a 聚合后链路基于流进行负载分担 链路聚合分类 静态聚合 xff1a 双方系统间不使用聚合协议来协商链路信息 动态聚合 xff1a 双方系统间使
  • c#中获取控件窗体句柄,获取窗体等的一些操作

    1 Control Handle 就是获取控件绑定到的窗口句柄 2 control IsHandleCreated 控件是否有与其关联的句柄 3 WinForm自定义函数FindControl实现按名称查找控件 public static
  • C#winform使用进度条

    在用c 做WinFrom开发的过程中 我们经常需要用到进度条 xff08 ProgressBar xff09 用于显示进度信息 这时候我们可能就需要用到多线程 xff0c 如果不采用多线程控制进度条 xff0c 窗口很容易假死 xff08