[英]SerialPort.Datarecieved problems
我對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 -=
提前致謝
DataReceived是SerialPort類公開的事件 。
當您想從端口接收數據時,可以向委托注冊此事件。
您無法檢查事件是否為true / false。 您可以檢查是否有訂閱者。
在此處閱讀有關該類的信息SerialPort MSDN
創建Serialport並注冊事件的程序示例:
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());
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.