我正在用C#编写一个程序,我希望从USB端口读取数据并在接收时写入文本框。我有一个通过RS-232发送数据(通过PuTTY验证)的万用表,我将232连接到Prolific 2303 USB-Serial转换器。我用设备管理器发现这是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();
}
}
}
答案 0 :(得分:2)
尝试放
serialPort1.DataReceived += serialPort1_DataReceived;
在dataAcquisitionMain()。
看起来您正在尝试初始化调用
的事件serialPort1_DataReceived;
在事件处理程序中。
如果这是有道理的。
尝试:
SerialPort.comPort.DataReceived +=new SerialDataReceivedEventHandler(comPort_DataReceived);