C# 无法从串行端口获取所有字符
我正在做一个10位数字ID输入的键盘项目。对于每次按键,它都会将“1”或“2”或“3”等发送到串行端口。但是,在尝试使用Console.WriteLine(id[i])显示我的id缓冲区的内容后,它只显示来自串行端口的第一个键盘值。我需要显示缓冲区中的所有10位输入。我找不到代码中的错误在哪里。我正在使用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
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
sDataReceived
-事件。另外,你说你相信,但是你真的调试了吗?你也应该添加你的发送代码。也许问题出在发送端?您还应该设置读取操作的超时,如下所示:设置一个较大的值以等待数据到达。标准错误,您不能忽略Read()的返回值。只有当你有一台非常非常慢的机器时,它才会是10。你必须一直调用Read(),直到把它们都调用完为止。好吧,我终于把它整理好了。我指的是:谢谢@HansPassant指出这一点。我永远不会知道这是一个Bug,实际上我对ReadExisting()方法不太熟悉。它是否将接收到的所有字符存储在一个数组中?否。它返回一个字符串。你可以找到更多关于它的信息好的,谢谢!。我使用的是DataReceivedHandler
,它可以正常工作。:)
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine(port.ReadExisting());
}