c#winform 进度条

C# WinForm进度条:实现一个进度条,用于显示任务完成的百分比。

在C中,我们可以使用WinForms的ProgressBar控件来实现进度条效果,以下是详细的步骤和代码示例:

1、我们需要在WinForms项目中添加一个ProgressBar控件,可以在工具箱中找到它,然后将其拖放到窗体上。

c#winform 进度条

2、接下来,我们需要设置ProgressBar的属性,在属性窗口中,我们可以设置以下属性:

Maximum:进度条的最大值,即进度条的最大长度。

Value:进度条的当前值,即进度条的当前长度。

Minimum:进度条的最小值,即进度条的最小长度。

c#winform 进度条

Left:进度条的左边缘与窗体左边缘的距离。

Top:进度条的上边缘与窗体上边缘的距离。

Width:进度条的宽度。

Height:进度条的高度。

c#winform 进度条

3、现在,我们需要编写代码来更新ProgressBar的值,这通常在后台线程中完成,以避免阻塞UI线程,以下是一个简单的示例,演示了如何使用BackgroundWorker组件来更新ProgressBar的值:

using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace WinFormsProgressBarDemo
{
    public partial class MainForm : Form
    {
        private BackgroundWorker _backgroundWorker;
        public MainForm()
        {
            InitializeComponent();
            InitializeBackgroundWorker();
        }
        private void InitializeBackgroundWorker()
        {
            _backgroundWorker = new BackgroundWorker();
            _backgroundWorker.DoWork += BackgroundWorker_DoWork;
            _backgroundWorker.ProgressChanged += BackgroundWorker_ProgressChanged;
            _backgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
        }
        private void StartProgressBar()
        {
            if (_backgroundWorker.IsBusy != true)
            {
                _backgroundWorker.RunWorkerAsync();
            }
        }
        private void StopProgressBar()
        {
            if (_backgroundWorker.IsBusy == true)
            {
                _backgroundWorker.CancelAsync();
            }
        }
        private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 0; i <= 100; i++)
            {
                if (_backgroundWorker.CancellationPending == true)
                {
                    e.Cancel = true;
                    break;
                }
                else
                {
                    // 模拟耗时操作,例如下载文件或处理大量数据
                    System.Threading.Thread.Sleep(50); // 暂停50毫秒
                    _backgroundWorker.ReportProgress(i); // 报告进度
                }
            }
        }
        private void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            // 更新ProgressBar的值和标签文本
            progressBar1.Value = e.ProgressPercentage;
            progressBar1.Text = string.Format("进度:{0}%", e.ProgressPercentage);
        }
        private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled == true)
            {
                progressBar1.Value = 0; // 如果任务被取消,将进度条设置为0%
                progressBar1.Text = "已取消"; // 显示“已取消”标签文本
            }
            else if (e.Error != null) // 如果发生错误,显示错误信息并停止进度条动画(仅适用于WinForms)
            {
                progressBar1.Value = 0; // 将进度条设置为0%
                progressBar1.Text = "出错"; // 显示“出错”标签文本
                progressBar1.Style = ProgressBarStyle.Marquee; // 停止进度条动画(仅适用于WinForms)
                MessageBox.Show(e.Error.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); // 显示错误消息框(仅适用于WinForms)
            }
            else // 如果任务成功完成,隐藏进度条(仅适用于WinForms)
            {
                progressBar1.Visible = false; // 隐藏进度条(仅适用于WinForms)
            }
        }
    }
}

4、现在,我们可以在窗体的按钮点击事件中调用StartProgressBar和StopProgressBar方法来启动和停止进度条动画,可以在一个按钮的Click事件中添加以下代码:

private void btnStart_Click(object sender, EventArgs e)
{
    StartProgressBar(); // 启动进度条动画(仅适用于WinForms)
}

原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/191842.html

(0)
酷盾叔订阅
上一篇 2024-01-31 00:52
下一篇 2024-01-31 00:54

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入