C#窗体程序,创建串口的接收,先检查串口的连接状态,接收多个数据,接收到数据"play"后触发事件1,接收到数据"pause "后触发事件2的完整代码
时间: 2024-09-19 17:03:49 浏览: 31
在C#中,创建一个串口接收并处理特定指令的窗体应用程序,首先需要引用`System.IO.Ports`命名空间来操作串口。以下是一个简单的示例,展示了如何初始化串口、检查连接状态以及监听接收的数据:
```csharp
using System;
using System.IO.Ports;
public partial class MainForm : Form
{
private SerialPort serialPort;
private string receivedData = "";
public MainForm()
{
InitializeComponent();
// 初始化串口
serialPort = new SerialPort("COM1", 9600); // 更改 COM 号为实际串口号
serialPort.DataReceived += OnSerialDataReceived;
serialPort.Open();
CheckConnection();
}
private void CheckConnection()
{
if (serialPort.IsOpen)
{
Console.WriteLine("串口已打开");
}
else
{
Console.WriteLine("串口未打开,尝试打开...");
try
{
serialPort.Open();
Console.WriteLine("成功打开串口");
}
catch (Exception ex)
{
MessageBox.Show($"无法打开串口: {ex.Message}");
}
}
}
private void OnSerialDataReceived(object sender, SerialDataReceivedEventArgs e)
{
ReceivedData += data => HandleCommand(data);
serialPort.DiscardInBuffer(); // 清空缓存区
var receivedByte = serialPort.ReadExisting();
receivedData += Encoding.ASCII.GetString(receivedByte);
}
private void HandleCommand(string data)
{
switch (data.ToLower())
{
case "play":
// 触发事件1(这里只是一个占位符)
RaiseEvent1();
break;
case "pause":
// 触发事件2(同样,这里是事件触发)
RaiseEvent2();
break;
default:
Console.WriteLine($"收到的数据: {data}");
break;
}
}
protected virtual void RaiseEvent1()
{
OnEvent1(new EventArgs()); // 自定义事件处理函数,如 OnPlayEvent();
}
protected virtual void RaiseEvent2()
{
OnEvent2(new EventArgs()); // 自定义事件处理函数,如 OnPauseEvent();
}
// 你需要为这两个自定义事件添加对应的处理方法
public event EventHandler Event1;
public event EventHandler Event2;
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
serialPort.Close();
}
}
// 使用这个主窗口,并记得为 Event1 和 Event2 添加适当的处理方法
public partial class Program : Application
{
[STAThread]
static void Main()
{
Application.Run(new MainForm());
}
}
```
在这个代码片段中,`OnSerialDataReceived`方法会在接收到新数据时被调用。然后根据接收到的数据判断是否触发事件1(`play`)或事件2(`pause`),你需要在`MainForm`类中定义`Event1`和`Event2`的处理方法。
注意:在实际应用中,你应该将上述代码放在单独的线程中运行,因为串口操作通常是异步的,避免阻塞UI线程。
阅读全文