c# - 协助 SerialPort 监控 (C# Winforms)
问题描述
我正在尝试开发一款可以与串行端口(COM3、COM5 等)进行侦听和交谈的软件。文件“form1.cs”被复制并粘贴在下面。
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;
using System.IO.Ports;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
string DispString;
public Form1()
{
InitializeComponent();
}
private void StartCOM1(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
StartCOM_General();
}
private void StartCOM3(object sender, EventArgs e)
{
serialPort1.PortName = "COM3";
StartCOM_General();
}
public void StartCOM_General()
{
serialPort1.BaudRate = 115200;
serialPort1.Parity = Parity.None;
serialPort1.StopBits = StopBits.One;
serialPort1.Handshake = Handshake.None;
try { serialPort1.Open(); } finally{ }
serialPort1.ReadTimeout = 2000;
if (serialPort1.IsOpen)
{
DispString = "";
}
}
private void ResetClosePort(object sender, EventArgs e)
{
DispString = "";
textBox1.Text = "";
serialPort1.Close();
}
private void UpdateData(object sender, SerialDataReceivedEventArgs e)
{
DispString += serialPort1.ReadExisting();
textBox1.Text = DispString;
}
}
}
我遇到的问题是我的端口没有显示任何内容。即使我的 serialPort 对象的“DataReceived”事件设置为调用 UpdateData,我认为根本不会调用 UpdateData。
解决方案
你可以检查
MessageBox.Show("Data recieved!");
在 UpdateData(..) 中查看是否调用了 UpdateData。
如果是可能尝试更换
DispString += serialPort1.ReadExisting();
和
SerialPort sp = (SerialPort)sender;
DispString += sp.ReadExisting();
推荐阅读
- docker - 我们如何称呼 Docker?这不是管理程序,对吧?但是,什么是合适的词呢?
- php - 如何使用提交按钮打开 file.html 并使用 fwrite?
- python - manifest.yml 中的声明服务和服务有什么区别?
- r - 使用函数的参数创建一个新类
- javascript - 我的代码在计算 fps 时有什么问题?
- c# - 如何防止在数据库中打开 2 个连接?
- java - Appium:我如何定位 RecyclerView 来定位元素
- java - “类型安全:通过可变参数 conds 造成的潜在堆污染”
- angular - 在分配给数据的 devextreme 弹出窗口中没有出现
- javascript - 从Javascript中的数组返回具有默认值的对象