c# - 使用串口显示体重秤的数据
问题描述
我是 COM PORT 的新手,我想从体重秤读取数据并以TextBox
.
我能够获取数据,但它继续运行(流式传输)。
我只想在更改时显示。
我的代码:
using System.Linq;
using System.IO.Ports;
public partial class Form1 : Form
{
private const int BaudRate = 9600;
public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e)
{
string[] portNames = SerialPort.GetPortNames(); //<-- Reads all available comPorts
foreach (var portName in portNames)
{
comboBox1.Items.Add(portName); //<-- Adds Ports to combobox
}
comboBox1.SelectedIndex = 0; //<-- Selects first entry (convenience purposes)
}
private void button1_Click(object sender, EventArgs e)
{
//<-- This block ensures that no exceptions happen
if (_serialPort != null && _serialPort.IsOpen)
_serialPort.Close();
if (_serialPort != null)
_serialPort.Dispose();
//<-- End of Block
_serialPort = new SerialPort(comboBox1.Text, BaudRate, Parity.None, 8, StopBits.One); //<-- Creates new SerialPort using the name selected in the combobox
_serialPort.DataReceived += SerialPortOnDataReceived; //<-- this event happens everytime when new data is received by the ComPort
_serialPort.Open(); //<-- make the comport listen
textBox1.Text = "Listening on " + _serialPort.PortName + "...\r\n";
}
string str ="" ;
private delegate void Closure();
private void SerialPortOnDataReceived(object sender, SerialDataReceivedEventArgs serialDataReceivedEventArgs)
{
if (InvokeRequired) //<-- Makes sure the function is invoked to work properly in the UI-Thread
BeginInvoke(new Closure(() => { SerialPortOnDataReceived(sender, serialDataReceivedEventArgs); })); //<-- Function invokes itself
else
{
int dataLength = _serialPort.BytesToRead;
byte[] data = new byte[dataLength];
int nbrDataRead = _serialPort.Read(data, 0, dataLength);
if (nbrDataRead == 0)
return;
str = System.Text.Encoding.UTF8.GetString(data);
textBox1.Text = str.ToString();
//_serialPort.Close();
//var newVal = _serialPort.ReadExisting();
//if (String.Compare(textBox1.Text, newVal) != 0.0)
// textBox1.Text = newVal;
}
}
private void button2_Click(object sender, EventArgs e)
{
//_serialPort.Close();
MessageBox.Show(str);
}
}
解决方案
推荐阅读
- jenkins-pipeline - 如何传递 jenkins 的凭据以将 docker 映像推送到我自己的注册表?
- php - php 二维数组排列...;单拼音有多个英文字母
- c# - NET CORE 3.1 OpenIdConnect 重定向
- angular - 角度延迟加载
- javascript - React Hooks - 更改父样式以反映子 onClick
- javascript - React Native 无法 npx 初始化项目,找不到模块错误
- bash - 使用 bash 脚本暴力破解我的在线帐户密码
- c# - 等待 CefSharp 中的 javascript 渲染页面加载
- python-3.x - 通过 python 进行的弹性搜索给出了错误的计数
- python - 在 Python 中将值插入二叉树