首页 > 解决方案 > 协助 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。

这是表单的图像,其中为 serialPort1 打开了事件选项卡。 在此处输入图像描述

标签: c#winforms

解决方案


你可以检查

MessageBox.Show("Data recieved!");

在 UpdateData(..) 中查看是否调用了 UpdateData。
如果是可能尝试更换

DispString += serialPort1.ReadExisting();

SerialPort sp = (SerialPort)sender;
DispString += sp.ReadExisting();

推荐阅读