如何制作一个实时C#计时器以在Label中显示执行时间,而不丢弃任何Timer.Interval事件?

时间:2018-09-09 03:12:23

标签: c#

我有一个启动Timer1的按钮,Timer1每100毫秒打印一次当前执行时间,但是当我进行某些计算时,timer1_Tick()将暂停直到完成该计算,我认为该计算会干扰Timer1,因此该timer1_Tick()被丢弃(或阻止了该线程)。

实际上,计算非常复杂,可能需要40秒钟,我只需要每100ms显示一次执行时间就可以告诉用户该函数的结尾有多接近,请您告诉我如何执行此工作? ?

    double a = 0;
    public Form1()
    {
        InitializeComponent();
        timer1.Interval = 100;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {

        a += 0.1;
        label1.Text = a.ToString();
    }

    private void UserStartTimer_Click(object sender, EventArgs e)
    {
        a = 0.0;
        timer1.Enabled = true;

    }

    private void UserCalcSomething_Click(object sender, EventArgs e)
    {
        double s = 0;
        for (int i = 0; i < 100000; i++)
        {
            for (int j = 0; j < 10000; j++)
            {
                s = i + j;
            }
        }
    }

    private void UserStopTimer_Click(object sender, EventArgs e)
    {
        timer1.Enabled = false;
    }

1 个答案:

答案 0 :(得分:1)

只需在另一个线程或任务中执行计算即可:

private void UserCalcSomething_Click(object sender, EventArgs e)
{
    Task.Factory.StartNew(() => {
       double s = 0;
       for (int i = 0; i < 100000; i++)
       {
           for (int j = 0; j < 10000; j++)
           {
               s = i + j;
           }
       }
    }
}