C# window forms 进度条实现

在 C# Windows Forms 应用程序中,如果在后台执行长时间运行的任务,并希望同时更新进度条,可以使用多线程来实现。这将确保进度条的更新不会阻塞主线程,从而保持界面的响应性。以下是一个示例,演示了如何在后台执行任务并更新进度条。

using System;

using System.ComponentModel;

using System.Threading;

using System.Windows.Forms;

namespace BackgroundWorkerExample

{

public partial class MainForm : Form

{

private BackgroundWorker worker;

public MainForm()

{

InitializeComponent();

worker = new BackgroundWorker();

worker.WorkerReportsProgress = true;

worker.DoWork += Worker_DoWork;

worker.ProgressChanged += Worker_ProgressChanged;

worker.RunWorkerCompleted += Worker_RunWorkerCompleted;

}

private void StartButton_Click(object sender, EventArgs e)

{

if (!worker.IsBusy)

{

worker.RunWorkerAsync();

StartButton.Enabled = false;

}

}

private void Worker_DoWork(object sender, DoWorkEventArgs e)

{

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

{

Thread.Sleep(50); // 模拟任务的延迟

worker.ReportProgress(i);

}

}

private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)

{

progressBar1.Value = e.ProgressPercentage;

}

private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

{

StartButton.Enabled = true;

MessageBox.Show("任务完成!");

}

}

}

在这个示例中,使用了 `BackgroundWorker` 组件来在后台执行任务并更新进度条。`BackgroundWorker` 组件允许使用事件来管理后台工作的不同阶段。

在 `Worker_DoWork` 方法中,执行模拟任务并使用 `worker.ReportProgress` 方法报告进度。在 `Worker_ProgressChanged` 方法中,我们更新进度条的值。最后,在 `Worker_RunWorkerCompleted` 方法中,启用"开始"按钮并显示任务完成的消息。

相关推荐
蔚一几秒前
Java设计模式(单例模式)——单例模式存在的问题(完整详解,附有代码+案例)
java·开发语言·单例模式·设计模式
小乖兽技术3 分钟前
C#开发基础之单例模式下的集合数据,解决并发访问读写冲突的问题
单例模式·c#·线程安全·读写冲突·并发访问
zhangbin_2375 分钟前
【Python机器学习】NLP信息提取——正则模式
开发语言·人工智能·python·深度学习·机器学习·自然语言处理
ღ᭄陽先生꧔ꦿ᭄16 分钟前
Java异常架构与异常关键字
java·开发语言·架构
郭源潮117 分钟前
【C++二叉树】二叉树的前序遍历、中序遍历、后序遍历递归与非递归实现
开发语言·c++·算法
繁依Fanyi23 分钟前
【问题随记】在使用 AuthenticationManager 的时候,出现循环依赖问题 —— `java.lang.StackOverflowError`
java·大数据·开发语言
咩咩大主教29 分钟前
LinuxC++的UDP服务器和客户端通信
linux·服务器·c语言·开发语言·c++·udp
Qhumaing31 分钟前
C语言PTA-计算最大游戏胜率
c语言·开发语言·学习·pta
Wangx_wang1 小时前
C++——多态
开发语言·c++
一丝晨光1 小时前
语言的循环语句
java·c++·python·c#·c·fortran·algol