0

我对 SerialPort.DataReceived 事件有疑问。让我解释一下我的问题。我有 1 个表单让我们调用这个 mainform.cs,我有一个类 pumpfuntions.cs,在 pumpfunctions.cs 中我创建了我的串口并使用串口创建了我需要的功能。

我想要的是我收到的数据进入一个文本框。但问题是我的 Datareceived 类在我的 pumpfunctions.cs 中。

我该如何解决这个问题。

代码 Pumpfunctions.cs:

Class PumpFunctions
    {

        private SerialPort _comport = new SerialPort();
        public string RxString;

        public void SerialPortDataReceived()
        {
            if (_comport.DataReceived != false)
            {
                string ReadData = _comport.ReadExisting();


                RxString = ReadData;
            }
        }

        public void OpenSerialPort()
        {
            _comport.PortName = "COM6";
            _comport.BaudRate = 9600;
            _comport.Open();

        }

        public void CloseSerialPort()
        {
            _comport.Close();

        }
}

代码 Mainform.cs

public partial class MainForm : Form
    {
        private PumpFunctions _pump = new PumpFunctions();
        private String rxString;

        public MainForm()
        {
            InitializeComponent();
            _pump.OpenSerialPort();

        }

private void SerialPortDataReceived()
        {
            string rxString = _pump.RxString;
            //this.Invoke(new EventHandler(_commandTextbox_TextChanged));

        }

        private void _commandTextbox_TextChanged(object sender, EventArgs e)
        {
            switch (rxString)
            {
                case "\r\n:": _commandTextbox.AppendText("Status: Stopped\r\n"); break;
                case "\r\n>": _commandTextbox.AppendText("Status: Running forward\r\n"); break;
                case "\r\n<": _commandTextbox.AppendText("Status: Running reverse\r\n"); break;
                case "\r\n*": _commandTextbox.AppendText("Status: Stalled\r\n"); break;
                case "\r\n*|": _commandTextbox.AppendText("Status: Infuse limit switch activated\r\n"); break;
                case "\r\n*W": _commandTextbox.AppendText("Status: Withdraw limit switch activated\r\n"); break;
                case "\r\n*D": _commandTextbox.AppendText("Status: Disable by emergency stop\r\n"); break;
                case "\r\n*T": _commandTextbox.AppendText("Status: Target volume reached\r\n"); break;
                default: _commandTextbox.AppendText(rxString); break;
            }
        }




    }

有人可以向我解释问题所在。

这也是我得到的错误

错误 1

The event 'System.IO.Ports.SerialPort.DataReceived' can only appear on the left hand side of += or -=

提前致谢

4

1 回答 1

0

DataReceived 是SerialPort 类公开的事件。
当您想从端口接收数据时,您向委托注册此事件。

无法检查事件是否为真/假。您可以检查是否有订阅者。
在此处阅读有关SerialPort MSDN的课程

创建串行端口并注册事件的程序示例:

class Program
{
    static SerialPort serialPort;
    static void Main(string[] args)
    {
        serialPort = new SerialPort("COM6", 1200, Parity.None, 8, StopBits.One);

        serialPort.Open();
        if (serialPort.IsOpen)
        {
            serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
        }

        Thread.Sleep(10000);
    }

    static void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        var length = serialPort.BytesToRead;
        byte[] buffer = new byte[length];
        serialPort.Read(buffer, 0, length);

        for (int i = 0; i < buffer.Length; i++)
        {
            if (buffer.Length >= 2)
            {
                Console.WriteLine("Ok with = > " + buffer.ToString());
            }
        }
    }
}
于 2013-09-24T11:18:13.157 回答