在进度栏运行期间,如何向GUI添加经过的计时器(分钟)

时间:2019-06-05 10:18:15

标签: c# winforms timer

我想将经过的时间(分钟)添加到GUI并并行执行其他操作。

我尝试的所有方法均未成功,但仍然存在于我的GUI中。我添加示例:

namespace Backgrondworker
{
    public partial class Form1 : Form
    {
        int aa = 0;

        public Form1()
        {
            InitializeComponent();         
        }

        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Value = 0;
            progressBar1.Maximum = 10;
            backgroundWorker1.RunWorkerAsync();
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {          
            for(int i =1;i<=10;i++)
            {
                Thread.Sleep(1000);
                backgroundWorker1.ReportProgress(0);            
            }          
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value += 1;
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show("completed");

        }
    }
}

3 个答案:

答案 0 :(得分:1)

您应该执行以下操作

  1. 创建计时器
  2. 启动进度条时启动计时器
  3. 在计时器中,使用timespan类和Elapsed属性打勾以获取经过的分钟数并将其显示在标签中。
  4. 进度栏为最大大小时,停止计时器。

答案 1 :(得分:0)

您将0放入了ReportProgress

backgroundWorker1.ReportProgress(0);

将此更改为:

int percent = (int)Math.Round((i * 100.0) / 10);
backgroundWorker1.ReportProgress(percent);

除以10可以使您完成工作的一部分(您在循环中计算10次),再乘以100可以得到百分比。

答案 2 :(得分:0)

我解释:     公共局部类Form1:表单     {

    public Form1()
    {
        InitializeComponent();         
    }

    private void button1_Click(object sender, EventArgs e)
    {

        Task.Run(() =>
        {
            for (int i = 1; i <= 10; i++)
            {
                Thread.Sleep(1000);
                label2.Text = i.ToString();
            }
        });

        Task.Run(() =>
        {
            for (int i = 1; i <= 10; i++)
            {
                Thread.Sleep(1000);
                label3.Text = i.ToString();
            }
        });
    } 
}

got:System.InvalidOperationException:“跨线程操作无效:控制从不是在其上创建线程的线程访问的'label3'。”