我在.NET中编写了一个简单的实用程序,它从串行端口读取并将数据写入控制台。但是,我注意到在很短的时间后,对Console.Write的调用无限期地挂起。我切换到P / Invoking WriteFile,但遇到了同样的问题。
显示数据的代码:
private static void DisplayData(byte[] data, int length)
{
int written;
IntPtr stdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
bool success = WriteFile(stdHandle, data, length, out written, IntPtr.Zero);
}
在挂起的呼叫时,要写入的数据是
"$GPGGA,,,,,,0,,,,M,,M,,*66\r\n$GPGNS,,,,,,N,,,,,,,U*7A\r\n$GPVTG,,T,,M,,N,,K,N*2C\r\n$GPRMC,,V,,,,,,,,,,N,U*2A\r\n$GPGSA,M,1,,,,,,,,,,,,,,,,1*0F\r\n$GPGST,,,,,,,,*57\r\n"
。
与长度(0x9D字节)相比,我已经检查过以确保缓冲区足够大(0x1000字节)。我不确定为什么对WriteFile的调用会挂起这么简单的写操作。