我正在用C#編寫一個程序,我想從USB端口讀取數據並在收到時寫入文本框。我有一臺萬用表,它通過RS-232發送數據(通過PuTTY驗證),並且我已將232連接到Prolific 2303 USB串行轉換器。我使用設備管理器來查明這是COM4,並檢查萬用表的規格以找到波特,停止位,奇偶校驗等。我使用的是System.IO.Ports.SerialPort,並且我設置了串口對象與適當的COM引用,波特等。出於某種原因,DataReceived事件似乎從來沒有被觸發,因爲我的委託函數不執行。就像我說的,我知道數據到達的事實,因爲我可以在PuTTY中看到它。下面是我的代碼,希望有人可以幫助我...請告訴我,如果您需要更多信息來弄清楚這是怎麼回事。很多,很多人提前感謝!USB串行轉換器不會觸發C#中的DataReceived
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。 – user2172571 2013-03-15 14:14:29