如何在程序的不同位置使用progressbar.value 属性

How to use progressbar.value property at different locations of program

我需要在不同的位置使用 progressbar.value 属性。但问题是,在执行时它只显示给定的最大值。我需要在 25% 和 75% 时停止,并在延迟一段时间后,在 100% 时停止。我怎样才能克服这个问题。提前致谢...

C#

namespace ProgressBarWindowForm
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        public void Form1_Load(object sender, System.EventArgs e)
        {
            label1.Hide();
            progressBar1.Minimum = 0;
            progressBar1.Maximum = 100;

        }

        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Value = 25;

            if (progressBar1.Value == 25)
            {
                label1.Show();
                label1.Text = "Process Complete 25%";
            }
            progressBar1.Value = 75;

            if (progressBar1.Value == 75)
            {
                label1.Show();
                label1.Text = "Process Complete 75%";
            }
       }
   }
}

进度条控件名称是progressBar1, 标签名称是 label1 和 按钮名称是 button1 当我点击按钮时,进度条值直接填充了 75%。我想在 25% 时停止它,经过一段时间后它应该填充 75% 然后 100%...有人能帮忙吗..我可以只使用 "progressBar1.value" 一次还是我需要的多次?

您需要在更改之间添加延迟。截至目前,按钮将条形前进到 25,设置标签,然后在不暂停的情况下将条形前进到 75。

System.Threading.Thread.Sleep(n); 将休眠 n 毫秒,您在设置 25% 标记的语句后将需要它。

编辑

如果您希望它的值仅在单击按钮时前进,则需要在前进之前检查进度条的值。

在伪代码中,类似于:

onclick() {
    if (progress == 0) {
        progress = 25
        label = the25MarkText
    } else if (progress == 25) {
        progress = 75
        label = the75MarkText
    }
}

点击按钮更新progressBar值很简单,可以在页面加载中初始化属性,也可以使用设计器,在页面加载中会像下面这样:

private int ProgressPercentage = 10;
public void Form1_Load(object sender, System.EventArgs e)
{
     progressBar1.Minimum = 0;
     progressBar1.Maximum = 100;
     progressBar1.Value = 0;
}

这样初始化就完成了,现在你可以像下面这样编写按钮点击的代码,通过它你可以在每次按钮点击时更新进度条:

private void button1_Click(object sender, EventArgs e)
{
     progressBar1.Value += ProgressPercentage;
     label1.Text = String.Format("Process Complete {0}%",progressBar1.Value);
}

如果您希望更新在特定时间间隔内自动发生,您可以使用计时器并在单击按钮时启用计时器。 Here 你可以找到一个类似的线程,它可以用来为你的场景实现定时器。

根据您的评论进行更新,调用延迟不是最佳做法,您可以在此处使用计时器,如下所示:

System.Windows.Forms.Timer proTimer = new System.Windows.Forms.Timer();
private void Form1_Load(object sender, EventArgs e)
{
    proTimer.Interval = 1000;
    progressBar1.Minimum = 0;
    progressBar1.Maximum = 100;
    progressBar1.Value = 0;
    proTimer.Tick += new EventHandler(proTimer_Tick);
}
private void button1_Click(object sender, EventArgs e)
{
    proTimer.Enabled = true;
    proTimer.Start();
}

// Timer event
void proTimer_Tick(object sender, EventArgs e)
{
     progressBar1.Value += ProgressPercentage;
     label1.Text = String.Format("Process Complete {0}%",progressBar1.Value);        
     if (progressBar1.Value == 100)
     {
        proTimer.Stop();
        proTimer.Enbled = false;
     }
}

试试这个,在 windows 表单中拖放后台工作程序

 public partial class Form1 : Form
 {
   public Form1()
   {
    InitializeComponent();

    backgroundWorker1.WorkerReportsProgress = true;
    // This event will be raised on the worker thread when the worker starts
    backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
    // This event will be raised when we call ReportProgress
    backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
   }
  private void button1_Click(object sender, EventArgs e)
  {
    // Start the background worker
    backgroundWorker1.RunWorkerAsync();
  }
// On worker thread so do our thing!
  void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        // Your background task goes here
        for (int i = 0; i <= 100; i++)
        {
            // Report progress to 'UI' thread
            backgroundWorker1.ReportProgress(i);
            // Simulate long task
            if (label1.InvokeRequired)
            {
                label1.Invoke(new MethodInvoker(delegate
                {
                    label1.Show();
                    label1.Text = "Process Complete " + progressBar1.Value + "%";
                }));
            }
            if (progressBar1.Value == 25 || progressBar1.Value == 75)
            {
                System.Threading.Thread.Sleep(1000);
            }
            System.Threading.Thread.Sleep(100);
        }
    }
// Back on the 'UI' thread so we can update the progress bar
  void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
   {
    // The progress percentage is a property of e
    progressBar1.Value = e.ProgressPercentage;
   }
 }

使用Timer延迟后更新进度条:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        timer.Tick += Timer_Tick;
        timer.Interval = 1000; // delay: 1000 milliseconds
    }

    Timer timer = new Timer();

    private void Timer_Tick(object sender, EventArgs e)
    {
        if (progressBar1.Value == 100)
        {
            timer.Stop();
            return;
        }
        progressBar1.Value += 25;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        progressBar1.Value = 25;
        timer.Start();
    }
}