C#窗体程序,创建串口的接收,先检查串口的连接状态,COM3收到十六进制多字节数据"70 61 75 73 61"后触事件1的完整代码
时间: 2024-09-18 13:05:19 浏览: 48
在C#中,创建一个Windows Forms应用程序并处理串口通信,首先需要导入System.IO.Ports命名空间,然后初始化SerialPort对象。以下是一个完整的示例代码片段,用于检查串口连接、监听数据以及触发特定事件:
```csharp
using System;
using System.IO.Ports;
public partial class MainForm : Form
{
private SerialPort serialPort = new SerialPort("COM3"); // 这里假设是COM3,需要替换实际的端口号
public event EventHandler<DataReceivedEventArgs> DataReceivedEvent; // 定义事件
public MainForm()
{
InitializeComponent();
// 检查串口是否打开
if (!serialPort.IsOpen)
{
try
{
serialPort.Open(); // 打开串口
Console.WriteLine("串口已打开");
}
catch (Exception ex)
{
MessageBox.Show($"无法打开串口: {ex.Message}");
}
}
// 注册DataReceived事件处理器
serialPort.DataReceived += SerialPort_DataReceived;
}
private void SerialPort_DataReceived(object sender, DataReceivedEventArgs e)
{
if (e.Data != null) // 如果有接收到的数据
{
string hexData = e.Data.ToString("X4"); // 转换为十六进制字符串
if (hexData == "7061757361") // 判断是否接收到指定数据
{
OnDataReceivedEvent(new EventArgs()); // 触发事件,这里只是一个简单的示例,可根据需求填充事件处理逻辑
}
else
{
Console.WriteLine($"接收到的数据: {hexData}");
}
}
}
protected virtual void OnDataReceivedEvent(EventArgs e)
{
DataReceivedEvent?.Invoke(this, e); // 如果事件存在则触发
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
// 关闭串口前确保关闭
if (serialPort.IsOpen)
{
serialPort.Close();
}
}
}
```
要在主界面或其他地方触发`DataReceivedEvent`,可以添加如下的代码:
```csharp
// 在另一个方法或某个按钮点击事件中
MainForm mainForm = new MainForm();
mainForm.DataReceivedEvent += YourEventHandlerMethod; // 替换为实际的事件处理方法
mainForm.ShowDialog();
```
阅读全文