LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 实战 WinForm 窗体应用进度条设计详解

admin
2025年3月23日 7:36 本文热度 167

前言

在执行耗时较长的任务时,增加一个进度条来显示任务的进度,能够显著提升用户体验。如果没有进度条,用户可能会误以为程序运行出错或死机了。

本文将通过一个简单的示例,详细介绍如何在C# WinForm应用程序中设计和实现进度条。

正文

1、示例结构

主窗体:包含一个按钮,用于启动任务。

进度显示窗体:用于显示任务的进度条。

执行任务的C#类:包含实际的任务逻辑。

2、主窗体设计

首先,我们来设计主窗体。主窗体只需设置一个按钮,用于触发任务的执行。

需要注意的是,网上某些文章建议直接在主窗体中使用BackgroundWorker控件,但这可能会导致一些问题,例如:

重复任务冲突:如果在任务执行过程中临时取消任务,然后再次尝试启动任务时,会遇到错误提示:"此 BackgroundWorker 当前正忙,无法同时运行多个任务"。

为了避免这些问题,我们在每次点击按钮时动态创建新的BackgroundWorker对象,而不是使用固定的控件实例。

主窗体界面如下图:


主窗体的全部代码如下:


using System;
using System.ComponentModel;
using System.Windows.Forms;

namespaceTest
{
    publicpartialclassForm1 : Form
    {
        public Form1(
)

        {
            InitializeComponent();
        }
       public BackgroundWorker worker;
        private void button1_Click
        (object sender, EventArgs e)

        {
             //创建一个Backgroundworker,设置其参数
            this.worker = new BackgroundWorker();  
            worker.DoWork += 
            new DoWorkEventHandler(backgroundwork);  
            //执行工作时,绑定对应的方法
            worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted); 
            //工作完成时,绑定对应的方法
            worker.WorkerReportsProgress=true;   
            //允许报告进度
            worker.WorkerSupportsCancellation=true;  
            //支持中途取消
           //开始执行操作
            worker.RunWorkerAsync();
            ProcessForm form = new ProcessForm(worker);
            // 显示进度条窗体
            form.ShowDialog(this);
            form.Close();
        }

        private void backgroundwork
        (object sender, DoWorkEventArgs e)

        {
            DataOperate dataOperate = new DataOperate();  
            //执行实际任务的类
            dataOperate.operating(worker);  
            //传入worker,以便于报告进度
        }

        private void backgroundWorker1_RunWorkerComplete
        (object sender, RunWorkerCompletedEventArgs e)

        {
            if (e.Error != null)
            {
                MessageBox.Show(e.Error.Message);
            }
            elseif (e.Cancelled)
            {
                this.worker.CancelAsync();
            }
            else
            {
            }
        }
    }
}

进度条显示窗体,由一个processbar控件和一个按钮组成,界面如下:

对应的全部代码如下:


using System;
using System.ComponentModel;
using System.Windows.Forms;

namespaceTest
{
    publicpartialclassProcessForm : Form
    {
        private BackgroundWorker backgroundWorker1;
        public ProcessForm(BackgroundWorker backgroundWorker1)
        {
            InitializeComponent();
            this.backgroundWorker1 = backgroundWorker1;
            this.backgroundWorker1.ProgressChanged += 
            new ProgressChangedEventHandler
            (backgroundWorker1_ProgressChanged);
            this.backgroundWorker1.RunWorkerCompleted += 
            new RunWorkerCompletedEventHandler
            (backgroundWorker1_RunWorkerCompleted);
        }

        private void ProcessForm_Load(object sender, EventArgs e)
        {

        }

        void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.Close();
            //执行完之后,直接关闭页面
        }
        void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.progressBar1.Value = e.ProgressPercentage;
        }

        private void button1_Click_1(object sender, EventArgs e)
        {

            this.backgroundWorker1.CancelAsync();
            this.button1.Enabled = false;
            this.Close();
        }
    }
}

最后,是执行耗时任务的类DataOperate.cs,这里模拟了一个耗时10秒的任务,全部代码如下:

程序运行后,点击"开始"按钮,就会弹出进度条显示进度,点击"取消"可取消任务,取消任务后可再次点击“开始”再次执行任务。


总结

在C# WinForm应用开发中,进度条是一个非常有用的UI组件,它能够直观地展示任务的执行进度,提升用户体验。

本文通过详细的步骤和示例代码,介绍了如何在WinForm应用中设计和实现进度条。


阅读原文:原文链接


该文章在 2025/3/24 16:49:22 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved