为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复while循环崩溃程序

如何修复while循环崩溃程序

C#
函数式编程 2022-01-09 15:17:37
我试图在 Visual Studio 中按下检查按钮时连续发送串行数据。到目前为止,这就是我想出的:private void checkBox1_CheckedChanged_1(object sender, EventArgs e)    {        while (checkBox1.Checked)        {            serialPort1.Write("D");            Task.Delay(100);            if (checkBox1.Checked != true)            {                break;            }        }                                            `    出于某种原因,每当我启动程序并选中该框时,程序就会冻结。我无法退出程序或最小化它或任何东西。它只是停在它的轨道上。
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

Windows 中的用户界面基于消息。您的 while 循环在处理这些消息的线程中运行。当您的代码运行时,不会处理任何消息。用户界面无法重绘,也无法对用户输入做出反应。

更好的方法:使用Timer组件。TickTimer的事件将根据 的Interval属性每 n 毫秒执行一次Timer。在这种情况Tick下,您可以检查 Checkbox 的状态,然后根据是否选中复选框来执行某些操作。

如果“做某事”是一项非常短暂的活动,这是一个很好的方法。对于更长的活动,您需要更复杂的设置,这超出了 SO 问题的范围,除非您提供更多详细信息。


查看完整回答
反对 回复 2022-01-09
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

您正在阻塞 UI 线程,因为您的事件正在同步处理。有关异步/等待编程的一些提示,请参阅此答案:如何从另一个线程更新 GUI?


查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信