C# 从串行中断读取以开始写入?

C# 从串行中断读取以开始写入?,c#,multithreading,serial-port,at-command,C#,Multithreading,Serial Port,At Command,我需要在串行端口上“监听”传入流量,并对其进行处理。但是,当用户单击按钮时,我需要将数据写入该串行端口 对于读取传入消息,我使用ReadByte()而不超时。当我设置Timout时,当没有字符出现时(大多数情况下都会发生!)会抛出异常 但这会“阻塞”串行端口。现在我无法在其他线程(执行按钮单击事件的线程)中写入它。我目前的解决方案是杀死试图读取数据然后开始向其中写入数据的线程 我知道这不是一个好办法,但是我还能做什么呢 我正在尝试为我的移动调制解调器创建gui应用程序。在使用ReadByte()

我需要在串行端口上“监听”传入流量,并对其进行处理。但是,当用户单击按钮时,我需要将数据写入该串行端口

对于读取传入消息,我使用ReadByte()而不超时。当我设置Timout时,当没有字符出现时(大多数情况下都会发生!)会抛出异常

但这会“阻塞”串行端口。现在我无法在其他线程(执行按钮单击事件的线程)中写入它。我目前的解决方案是杀死试图读取数据然后开始向其中写入数据的线程

我知道这不是一个好办法,但是我还能做什么呢

我正在尝试为我的移动调制解调器创建gui应用程序。

在使用ReadByte()之前,请检查缓冲区中是否有字符等待。注意,我特别寻找10个字符

我目前的做法是:

int datalen = serialPort1.BytesToRead;
label1.Text="Readexisting";
if (datalen >=10)
{
    string data = serialPort1.ReadExisting();
    label1.Text=data;
}

当从一个线程向另一个线程读取数据时,不应该有任何东西阻止您从一个线程向端口写入数据,这是完全正常的事情。典型的串行端口是全双工的,可以同时发送和接收数据。要利用这一点,您需要对非阻塞(也称为异步)I/O使用多线程或系统调用,或者使用select()确定何时可以在不被阻塞的情况下执行I/O。