【发布时间】:2020-12-11 02:20:04
【问题描述】:
我使用的是 .NET Core 3.1 Web API,但它也发生在一个简单的普通控制台应用程序上。我开始调查,但不幸的是,我不知道CheckReadWriteArguments 计数为非负数的原因或可能是什么原因。
感谢任何帮助或指导。
为什么我使用 .NET Core 而不是 python?因为试图在 rasbperry pi 上有一个 Web 应用程序,它将通过串行通信向 arduino 设备发送和读取命令。而且因为我更喜欢 .NET Core
以下例外:
未处理的异常。 System.ArgumentOutOfRangeException:非负数 需要的号码。 (参数“计数”)在 System.IO.Ports.SerialStream.CheckReadWriteArguments(字节 [] 数组, Int32 偏移量,Int32 计数)在 System.IO.Ports.SerialStream.ReadAsync(Byte[] 数组,Int32 偏移量, Int32 计数,CancellationToken cancelToken) 在 System.IO.Ports.SerialStream.Read(Byte[] 数组,Int32 偏移量,Int32 计数,Int32 超时)在 System.IO.Ports.SerialPort.InternalRead(Char[] 缓冲区,Int32 偏移量, Int32 计数,Int32 超时,布尔 countMultiByteCharsAsOne) 在 System.IO.Ports.SerialPort.Read(Char[] 缓冲区,Int32 偏移量,Int32 计数)在 ConsoleApp9.Program.Read() 中 C:\Users\Mircea\source\repos\ConsoleApp9\Program.cs:第 51 行 ConsoleApp9.Program.Main(String[] args) 在 C:\Users\Mircea\source\repos\ConsoleApp9\Program.cs:line 32 Aborted
控制台应用的源代码。
class Program
{
static SerialPort _serialPort;
static void Main(string[] args)
{
_serialPort = new SerialPort("/dev/ttyAMA0", 9600, Parity.None, 8, StopBits.One);
// Set the read/write timeouts
_serialPort.ReadTimeout = 1500;
_serialPort.WriteTimeout = 1500;
_serialPort.Open();
_serialPort.DataReceived += _serialPort_DataReceived;
while (true)
{
Read();
}
_serialPort.Close();
Task.Delay(50000).GetAwaiter().GetResult();
}
private static void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine(e.EventType);
Console.WriteLine(sender.ToString());
}
public static void Read()
{
try
{
char[] asd = new char[255];
int message = _serialPort.Read(asd,1,30);
Console.WriteLine(message);
Console.WriteLine(asd.ToString());
}
catch (TimeoutException) { }
}
}
【问题讨论】: