【问题标题】:USB-Serial Converter does not trigger DataReceived in C#USB-Serial Converter 不会在 C# 中触发 DataReceived
【发布时间】:2013-03-15 05:10:14
【问题描述】:

我正在用 C# 编写一个程序,我想从 USB 端口读取数据并在收到数据时写入文本框。我有一个通过 RS-232 发送数据(通过 PuTTY 验证)的万用表,我将 232 连接到 Prolific 2303 USB 串行转换器。我使用设备管理器发现这是COM4,并检查了万用表的规格以找到波特率、停止位、奇偶校验等。我使用的是System.IO.Ports.SerialPort,并设置了串口具有适当的 COM 引用、波特率等的对象。由于某种原因,DataReceived 事件似乎永远不会被触发,因为我的委托函数没有执行。就像我说的,我知道数据正在到达,因为我可以在 PuTTY 中看到它。以下是我的代码,希望有人可以帮助我...如果您需要更多信息来弄清楚这是怎么回事,请告诉我。非常非常感谢!

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;
using System.IO.Ports;
using System.Reflection;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class dataAcquisitionMain : Form
    {
        string RxString;

        public dataAcquisitionMain()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)//"Start" button
        {
            serialPort1.PortName = "COM4";
            serialPort1.BaudRate = 2400;

            serialPort1.Open();
            if (serialPort1.IsOpen)
            {
                inputStream.ReadOnly = false; //A text box I want to put data into
                startButton.Enabled = false;
                stopButton.Enabled = true;
            }
        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            serialPort1.DataReceived += serialPort1_DataReceived;
            RxString = serialPort1.ReadExisting();
            this.Invoke((MethodInvoker)delegate{DisplayText();});
        }
        private void DisplayText()
        {
            textBox1.Text = "here";
            inputStream.Text = RxString;
            inputStream.AppendText(RxString);
        }

        private void dataAcquisitionMain_FormClosing(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen) serialPort1.Close();
        }
    }
}

【问题讨论】:

  • 我已经解决了我自己的问题。对于遇到与我相同的地狱问题的任何人,我必须将串行端口对象上的属性 DTREnable 更改为 True。

标签: c# usb


【解决方案1】:

试试看

serialPort1.DataReceived += serialPort1_DataReceived;

在 dataAcquisitionMain() 中。

您似乎正在尝试初始化调用的事件

serialPort1_DataReceived;

在事件处理程序中。

如果这有意义的话。

试试:

SerialPort.comPort.DataReceived +=new SerialDataReceivedEventHandler(comPort_DataReceived);

【讨论】:

  • 同意。 OP 在事件处理程序本身中添加事件处理程序是没有意义的。 serialPort1_DataReceived 永远不会被调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多