using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace serialConn { public delegate void NewsDelegate(byte[] time);//跨窗体调用第一步,委托 public partial class Form1 : Form { private delegate void SafeCall(string text);//声明委托 public static NewsDelegate news;//跨窗体委托的实例化(第三步1) public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { for (int i = 1; i < 10; i++) { CmbSerialNum.Items.Add("COM" + i.ToString()); } CmbBuad.Items.Add("2400"); CmbBuad.Items.Add("4800"); CmbBuad.Items.Add("9600"); CmbBuad.Items.Add("19200"); CmbBuad.Items.Add("115200"); news = News;//跨窗体调用(第三步2) } private void BtnOpen_Click(object sender, EventArgs e) { if (CmbBuad.Text == "" || CmbSerialNum.Text == "") { MessageBox.Show("请选择串口号和波特率"); } try { serialPort1.Open(); BtnOpen.Enabled = false; BtnClose.Enabled = true; } catch { MessageBox.Show("串口打开错误,请进一步检查"); } } private void BtnClose_Click(object sender, EventArgs e) { try { serialPort1.Close(); BtnClose.Enabled = false; BtnOpen.Enabled = true; } catch { MessageBox.Show("无法关闭串口"); } } private void CmbSerialNum_SelectedValueChanged(object sender, EventArgs e) { serialPort1.PortName = CmbSerialNum.Text.ToString(); } private void CmbBuad_SelectedValueChang
时间: 2024-02-11 20:29:28 浏览: 22
ed(object sender, EventArgs e)
{
serialPort1.BaudRate = Convert.ToInt32(CmbBuad.Text);
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
int len = serialPort1.BytesToRead;//获取接收缓冲区中的字节数
byte[] data = new byte[len];//声明一个字节数组存储要读取的数据
serialPort1.Read(data, 0, len);//将数据读取到字节数组中
string str = Encoding.Default.GetString(data);//将字节数组转换为字符串
DisplayData(str);//将数据显示到文本框中
news(data);//跨窗体调用(第四步)
}
private void DisplayData(string data)
{
if (TxtData.InvokeRequired)
{
var d = new SafeCall(DisplayData);
TxtData.Invoke(d, new object[] { data });//跨线程访问控件(第二步)
}
else
{
TxtData.AppendText(data);
}
}
private void BtnSend_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
byte[] buffer = Encoding.Default.GetBytes(TxtSend.Text);//将文本框中的字符串转换为字节数组
serialPort1.Write(buffer, 0, buffer.Length);//向串口发送数据
TxtSend.Clear();//清空文本框
}
else
{
MessageBox.Show("请先打开串口");
}
}
}
}
这是一个串口通信的C#代码,请问你对这段代码有什么看法?