C# 写入串行输入端口-而不是输出端口
我有一个线程,它用这种结构等待串行通信:C# 写入串行输入端口-而不是输出端口,c#,multithreading,io,serial-port,blocking,C#,Multithreading,Io,Serial Port,Blocking,我有一个线程,它用这种结构等待串行通信: (InputStream是SerialPort.BaseStream) 问题是,除非我收到一些串行数据,否则我不能退出阻塞调用,也不能退出线程。 我不想Abort()线程-这是一个丑陋的解决方案 如果我写入InputStream,串行端口抽象会将数据重定向到输出端口(正如您通常所希望的那样) 如何向输入端口写入25个字节,以便执行读取,程序流继续?您可以尝试设置读取超时或使用异步读取。通常,为了终止阻塞读取,一个线程会使另一个线程关闭流,这将中止对它的任
(InputStream是SerialPort.BaseStream) 问题是,除非我收到一些串行数据,否则我不能退出阻塞调用,也不能退出线程。
我不想
Abort()
线程-这是一个丑陋的解决方案
如果我写入InputStream,串行端口抽象会将数据重定向到输出端口(正如您通常所希望的那样)
如何向输入端口写入25个字节,以便执行读取,程序流继续?您可以尝试设置读取超时或使用异步读取。通常,为了终止阻塞读取,一个线程会使另一个线程关闭流,这将中止对它的任何阻塞调用,发出适当错误/异常的信号。对于调试,您可以安装emulator(一些com端口模拟器可以对有线com端口进行测试)或使用带有镜像短截线的com电缆。您提出的XY问题不合逻辑(写入输入端口),并且不是根问题的正确(甚至不可行)解决方案。如果串行端口配置为规范读取,则必须等待行终止字符(由使用中的行规程定义)。如果不想等待行终止字符,那么可能应该为非规范(aka raw)输入配置串行端口。然后,您可以将读取设置为在各种超时和/或可用/请求的字节数组合时终止。
while ((bytesRead = InputStream.Read(RxBuffer, RxBufferIndex, 20)) > 0)
{
// read and handle data
if ((ShouldStop) || (!HasSource))
break;
}