Mr·GE 2023-07-03 15:20 采纳率: 51.5%
浏览 38
已结题

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;
            }
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2023-07-03 16:39
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月18日
  • 已采纳回答 7月10日
  • 创建了问题 7月3日

悬赏问题

  • ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡