代码之家  ›  专栏  ›  技术社区  ›  Fabricio Rodriguez

正在为注册事件处理程序System.IO.端口.SerialPort SerialDataReceivedEventHandler

  •  0
  • Fabricio Rodriguez  · 技术社区  · 5 年前

    我有个奇怪的问题。我正在尝试编写从.Net核心控制台应用程序的串行端口读取的代码。我正在使用Microsoft的System.IO.端口来自NuGet的v4.7.0库。我从这里复制了代码:

    https://docs.microsoft.com/en-us/dotnet/api/system.io.ports.serialport.datareceived?view=dotnet-plat-ext-3.1

    但是,当我将代码粘贴到Visual Studio中时,我立即收到以下错误:

    我的代码非常简单:

    using System;
    using System.IO.Ports;
    
    public class SerialComms
    {
        SerialPort _serialPort;
    
        private void SetupSerialPort()
        {
            _serialPort.PortName = "/dev/ttyS0";
            _serialPort.BaudRate = 115200;
            _serialPort.Parity = Parity.None;
            _serialPort.DataBits = 8;
            _serialPort.StopBits = StopBits.One;
            _serialPort.Handshake = Handshake.None;
            _serialPort.WriteTimeout = 500;
            _serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            _serialPort.Open();
        }
    
        private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string indata = sp.ReadExisting();
            Console.WriteLine("Data Received:");
            Console.Write(indata);
        }
    }
    

    我花了好几个小时在这上面,一辈子都搞不清我到底错在哪里。据我所知,事件处理程序的签名是正确的。有什么想法吗?

    0 回复  |  直到 5 年前
        1
  •  0
  •   Fabricio Rodriguez    5 年前

    我不知道为什么,但是替换:

    private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
    }
    

    private void DataReceivedHandler(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
    }