当前位置: 首页 > news >正文

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` 方法中,启用“开始”按钮并显示任务完成的消息。

http://www.lryc.cn/news/133765.html

相关文章:

  • ListNode相关
  • docker的资源控制及docker数据管理
  • 通过请求头传数据向后端发请求
  • 产品流程图是什么?怎么做?
  • 面试之快速学习STL-map
  • ES的索引结构与算法解析
  • 32.Netty源码之服务端如何处理客户端新建连接
  • 代码随想录day11
  • RabbitMQ实习面试题
  • Electron入门,项目运行,只需四步轻松搞定。
  • 【C++】visualstudio环境安装
  • 使用MySQL:5.6和owncloud镜像搭建个人网盘
  • php中创建对象时传递的参数是构造方法
  • C++并发及互斥保护示例
  • 新手常犯的错误,anzo capital昂首资本一招避免少走弯路
  • Java Vue (el-date-picker组件) 前后端 关于时间格式数据的处理方法
  • Python爬虫——scrapy_多条管道下载
  • lombok启动不生效(什么方法都试了,可还是不生效怎么办 ?! 救救我)
  • element文本域禁止手动拉伸、两种方式、textarea
  • c#中lambda表达式缩写推演
  • 无涯教程-PHP - 循环语句
  • 思维进化算法(MEA)优化BP神经网络
  • Kotlin 中的 设计模式
  • Vulnhub: ICMP: 1靶机
  • 我的创作纪念日(C++修仙练气期总结)
  • css的常见伪元素使用
  • 91. 解码方法
  • docker搭建opengrok环境2
  • 【校招VIP】java语言考点之ConcurrentHashMap1.7和1.8
  • php如何实现5x+2x+1x=100