Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 写入串行输入端口-而不是输出端口_C#_Multithreading_Io_Serial Port_Blocking - Fatal编程技术网

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;
}