我正在使用WinForm应用程序与微处理器(Arduino Micro)进行通信。调用'serialPort1.Open();'后,MCU的串口需要几秒钟才能使用。因此,在尝试从串行端口读取之前,我需要添加某种延迟,大约2或3秒。此外,我正在向MCU发送和接收命令,在此期间我还需要在串行写入和读取之间延迟100ms。
我尝试过使用Thread.Sleep(当然会锁定表单)和各种计时器方法,但没有运气。我经常使用这种延迟,所以我希望有一个看起来像这样的方法:
我的表单中的任何地方:invokeTimer(2000); //以ms为单位调用延迟方法
private void invokeDelay(int time)
{
// delay here and do nothing for specified time in milliseconds
}
简单示例:
serialPort1.Open(); // connect to MCU
invokeDelay(3000); // give MCU time to make serial stream available
// serial stream should now be available so ...
serialPort1.WriteLine("?"); // ask MCU to provide a response
invokeDelay(100); // 10-100ms depending on baud rate of MCU to respond
string response = serialPort1.ReadLine();
或者,我会很高兴检查是否有可用的串行数据,这样可以避免延迟/计时器。在Arduino IDE中有一个Serial.Available()函数,但我在Visual Studio中看不到任何类似的东西。否则我会坐在一个while循环中,直到串行流可用。
任何建议都会非常感激!