【问题标题】:.NET Core 3.1 System.IO.Port - System.ArgumentOutOfRangeException: Non-negative number required. (Parameter 'count').NET Core 3.1 System.IO.Port - System.ArgumentOutOfRangeException:需要非负数。 (参数“计数”)
【发布时间】:2020-12-11 02:20:04
【问题描述】:

我使用的是 .NET Core 3.1 Web API,但它也发生在一个简单的普通控制台应用程序上。我开始调查,但不幸的是,我不知道CheckReadWriteArguments 计数为非负数的原因或可能是什么原因。

我检查了herehere

感谢任何帮助或指导。

为什么我使用 .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) { }
    }
}

【问题讨论】:

    标签: .net-core raspberry-pi


    【解决方案1】:

    对于在 netCore 上遇到问题的人,请注意 _serialPort.Read _serialPort.ReadLine() 将等待来自设备(在我的情况下为 Arduino)的消息。

    也在写作部分。尝试使用 write(byte[]) 而不是通过 String,因为它会插入不同的字符

    示例 ->

    var stringMessage = "Message"
     var sendMessage = Encoding.ASCII.GetBytes(stringMessage);
                _serialPort.Write(sendMessage, 0, sendMessage.Length);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 2021-04-24
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      相关资源
      最近更新 更多