C#窗体程序,创建串口的接收,先检查串口的连接状态,收到十六进制数据"70 6C 61 79"后触发其它事件的完整代码
时间: 2024-09-18 13:04:39 浏览: 38
在C#中,创建一个窗体应用程序并处理串口通信,我们需要使用`System.IO.Ports.SerialPort`类来操作串口。首先,确保已添加了相关的命名空间,并在窗体的Load事件中初始化串口检查和数据接收。以下是完整的示例代码:
```csharp
using System;
using System.IO.Ports;
public partial class MainForm : Form
{
private SerialPort serialPort; // 创建SerialPort实例
public MainForm()
{
InitializeComponent();
// 初始化串口
serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); // 可以替换为你实际的串口号和波特率
serialPort.DataReceived += SerialPort_DataReceived; // 注册DataReceived事件
try
{
serialPort.Open(); // 尝试打开串口
serialPort.DiscardInBuffer(); // 清空缓冲区
MessageBox.Show("串口已连接。");
}
catch (Exception ex)
{
MessageBox.Show($"无法连接串口: {ex.Message}", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// DataReceived事件处理函数
private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] data = new byte[4];
serialPort.Read(data, 0, 4); // 读取4字节的数据
string hexData = BitConverter.ToString(data).Replace("-", "");
if (hexData == "706C6179")
{
TriggerEvent(hexData); // 触发特定事件
}
else
{
Console.WriteLine($"接收到的数据: {hexData}");
}
}
private void TriggerEvent(string hexData)
{
// 这里可以定义你的事件处理方法,例如调用其他方法或者UI更新
OnMyCustomEvent(hexData); // 假设OnMyCustomEvent是你自定义的事件
}
protected virtual void OnMyCustomEvent(string hexData) // 定义虚方法用于触发事件
{
EventHandler<MyCustomEventArgs> handler = MyCustomEvent;
if (handler != null)
{
handler(this, new MyCustomEventArgs(hexData));
}
}
// 假设你需要传递自定义事件数据
public event EventHandler<MyCustomEventArgs> MyCustomEvent;
public class MyCustomEventArgs : EventArgs
{
public string HexData { get; set; }
public MyCustomEventArgs(string hexData)
{
HexData = hexData;
}
}
}
// 使用时,在窗体上添加一个Button或其他控件,绑定Click事件到TriggerEvent方法
private void buttonTrigger_Click(object sender, EventArgs e)
{
TriggerEvent("706C6179"); // 这里模拟手动发送数据
}
```
在这个例子中,我们监听串口的`DataReceived`事件。当接收到十六进制数据"70 6C 61 79"时,会触发`TriggerEvent`方法,你可以在此处编写具体的业务逻辑。
阅读全文