C# 无法从串行端口获取所有字符

C# 无法从串行端口获取所有字符,c#,serial-port,C#,Serial Port,我正在做一个10位数字ID输入的键盘项目。对于每次按键,它都会将“1”或“2”或“3”等发送到串行端口。但是,在尝试使用Console.WriteLine(id[i])显示我的id缓冲区的内容后,它只显示来自串行端口的第一个键盘值。我需要显示缓冲区中的所有10位输入。我找不到代码中的错误在哪里。我正在使用System.IO.port static void Main(string[] args) { char[] id = new char[10] ; SerialPort p

我正在做一个10位数字ID输入的键盘项目。对于每次按键,它都会将“1”或“2”或“3”等发送到串行端口。但是,在尝试使用Console.WriteLine(id[i])显示我的id缓冲区的内容后,它只显示来自串行端口的第一个键盘值。我需要显示缓冲区中的所有10位输入。我找不到代码中的错误在哪里。我正在使用
System.IO.port

static void Main(string[] args)
{
    char[] id = new char[10] ;

    SerialPort port = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);

    port.Open();

    if (port.IsOpen) 
    { 
        Console.WriteLine("port is now open");       
    } 
    else 
    { 
        Console.WriteLine("port not opened correctly"); 
    }

    port.Read(id, 0, 10); 

    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine(id[i]);
    }
    Console.ReadLine();
}
static void Main(字符串[]args)
{
char[]id=新字符[10];
SerialPort端口=新的串行端口(“COM4”,9600,奇偶校验。无,8,停止位。1);
port.Open();
if(端口等参线)
{ 
Console.WriteLine(“端口现在已打开”);
} 
其他的
{ 
Console.WriteLine(“端口未正确打开”);
}
端口读取(id,0,10);
对于(int i=0;i<10;i++)
{
控制台写入线(id[i]);
}
Console.ReadLine();
}

首先检查您的设备是否正在发送任何数据。 您可以为此使用RS232终端

是一款免费的终端软件

如果硬件正确发送数据

添加事件

然后使用ReadExisting()方法捕获接收到的数据

private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
   Console.WriteLine(port.ReadExisting());
}

到目前为止看起来不错。你确定确实有数据要读取吗?我通常将读取过程绑定到
SerialPort
s
DataReceived
-事件。另外,你说你相信,但是你真的调试了吗?你也应该添加你的发送代码。也许问题出在发送端?您还应该设置读取操作的超时,如下所示:设置一个较大的值以等待数据到达。标准错误,您不能忽略Read()的返回值。只有当你有一台非常非常慢的机器时,它才会是10。你必须一直调用Read(),直到把它们都调用完为止。好吧,我终于把它整理好了。我指的是:谢谢@HansPassant指出这一点。我永远不会知道这是一个Bug,实际上我对ReadExisting()方法不太熟悉。它是否将接收到的所有字符存储在一个数组中?否。它返回一个字符串。你可以找到更多关于它的信息好的,谢谢!。我使用的是
DataReceivedHandler
,它可以正常工作。:)
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
   Console.WriteLine(port.ReadExisting());
}