C#定时器内循环,界面假死

在定时器内部加了while循环,执行的时候界面跟死机了一样,数字变化,颜色变化均无,等完全执行完才会恢复。根据网友的建议加入了application.doevents(),但是这样的话,循环里的动作一直在执行,不会停,该怎么办?

private void timer1_Tick(object sender, EventArgs e)
{
            if (measureflag == true)
            {
                int circlenum = Convert.ToInt32(label14.Text);
                ENC7480.Enc7480_Reset_Latch_Flag(0);
                ENC7480.Enc7480_Set_Encoder(0, 0);
                while (i < circlenum + 1)
                {
                    Application.DoEvents();
                    long a = ENC7480.Enc7480_Read_Latch_Status(0);
                    lanchStaus = ENC7480.Enc7480_Read_Latch_Status(0) & 0x100;
                    if (lanchStaus == 0x100)
                    {
                        button1.BackColor = Color.Red;
                        circle.Text = (circlenum - i).ToString();
                        long b = ENC7480.Enc7480_Get_LatchValue(0);
                        data.Add(b);
                        ENC7480.Enc7480_Reset_Latch_Flag(0);
                        i++;
                    }
                }
                measureflag = false;
                insertdata();
                Measure.Text = "测量";
                Measure.BackColor = Color.Lime;
            }
}

感觉你的思路乱了
换言之,循环和定时器两者你应该只用一个就行了
如果你要用循环,那么不要定时器,在while里面通过Sleep增加延迟
如果你用定时器,那么不要循环,每次定时执行一个你的循环里的步骤