我对C语言比较熟悉,最近我被要求做C#串行通信。 下面是我从COM端口接收数据代码:我可以做C#中的串行端口通信的计时器循环和超时?
public void RxData()
{
int i = 0;
int Data;
bool StartRx = false;
int timer;
while (true)
{
Data = sp.ReadByte();
if (Data == 0x01)
{
StartRx = true;
}
if (StartRx == true)
{
RxBuffer[i++] = Data;
}
if (Data == 0x04)
{
RxChkSum = RxBuffer[i - 2];
break;
}
timer++;
if(timer>100)
{
timer = 0;
break;
}
}
}
以上是我收到开头的0×01数据的方式,并结束于0x04。
我正在增加一个计时器来计算直到100并退出while循环以防万一我没有收到任何数据。有些像超时。
但似乎计时器不工作。当我没有收到任何数据时,我的程序永远停留在while循环中。
我知道这是我们在嵌入式c编程中编写的方式。但是,这是用C#编写的正确方法吗?
您的超时机制将无法按预期工作。您应该只在您未收到数据时增加计时器,并在收到数据时重置计时器。在当前实现中,即使您收到了100个字节,也会发生超时。 – PVitt 2012-08-08 10:44:52