我试图在 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 回答
![?](http://img1.sycdn.imooc.com/54584f6d0001759002200220-100-100.jpg)
萧十郎
TA贡献1815条经验 获得超12个赞
Windows 中的用户界面基于消息。您的 while 循环在处理这些消息的线程中运行。当您的代码运行时,不会处理任何消息。用户界面无法重绘,也无法对用户输入做出反应。
更好的方法:使用Timer
组件。Tick
Timer的事件将根据 的Interval
属性每 n 毫秒执行一次Timer
。在这种情况Tick
下,您可以检查 Checkbox 的状态,然后根据是否选中复选框来执行某些操作。
如果“做某事”是一项非常短暂的活动,这是一个很好的方法。对于更长的活动,您需要更复杂的设置,这超出了 SO 问题的范围,除非您提供更多详细信息。
- 2 回答
- 0 关注
- 159 浏览
添加回答
举报
0/150
提交
取消