RS232串口通信c#win7 .net framework 3.5 sp1

我是新的c#串口。 即时编写ac#program running是winXP和win7,用于在机器发送数据时保持从串口接收的数据。

using System.IO; using System.IO.Ports; using System.Threading; namespace RS232RVR { public partial class Form1 : Form { public Form1() { InitializeComponent(); SettingRS232(); } public void SettingRS232 () { try { SerialPort mySerialPort = new SerialPort("COM6"); mySerialPort.BaudRate = 9600; mySerialPort.Parity = Parity.None; mySerialPort.StopBits = StopBits.One; mySerialPort.DataBits = 8; mySerialPort.Handshake = Handshake.None; //send to hardware flow control. mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceviedHandler); mySerialPort.Open(); richTextBox1.Text = "on"; mySerialPort.Close(); } catch (Exception ex) { richTextBox1.Text = ex.Message; } } private void DataReceviedHandler( object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; string indata = sp.ReadExisting(); richTextBox1.Text = indata; } } 

}

COM6在我的电脑中处于活动状态。 但我的问题似乎是当数据来自串口时,datareceived事件不会触发。 (我通过使用一些免费软件应用程序检查了这项运动)

谁有人可以帮忙?

谢谢

  mySerialPort.Open(); richTextBox1.Text = "on"; mySerialPort.Close(); 

这不会起作用,打开它后,你会在几个微秒后关闭串口。 是的,DataReceived事件处理程序不可能触发。 关闭程序时只关闭端口。

  mySerialPort.Handshake = Handshake.None 

这也是一个问题,你现在需要自己控制握手信号。 绝大多数串口设备在看到机器已通电并准备好接收之前不会发送任何内容。 将DtrEnabled和RtsEnabled属性设置为true。

您是否从应用程序中复制了该代码? 它可能只是一个事件处理程序名称拼写错误的情况? 例如,DataReceviedHandler实际上应拼写为DataReceivedHandler。

问题解决了,我想分享。 我的罚款如下:

 namespace RS232RVR { public partial class Form1 : Form { private delegate void SetTextDeleg(string data); public Form1() { InitializeComponent(); SettingRS232(); } public void SettingRS232 () { try { SerialPort mySerialPort = new SerialPort("COM6"); mySerialPort.BaudRate = 9600; mySerialPort.Parity = Parity.None; mySerialPort.StopBits = StopBits.One; mySerialPort.DataBits = 8; mySerialPort.Handshake = Handshake.None; mySerialPort.ReadTimeout = 2000; mySerialPort.WriteTimeout = 500; mySerialPort.DtrEnable = true; mySerialPort.RtsEnable = true; mySerialPort.Open(); //mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); mySerialPort.DataReceived += DataReceivedHandler; textBox1.Text = "Serial Port is Ready."; } catch (Exception ex) { textBox1.Text = ex.Message; } } public void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; System.Threading.Thread.Sleep(500); string indata = sp.ReadExisting(); this.BeginInvoke(new SetTextDeleg(DisplayToUI), new object[] { indata }); //textBox1.Text += indata; } private void DisplayToUI(string displayData) { textBox1.Text += displayData.Trim(); // textBox1.Text += displayData; } } } 

如果有人对代码发表评论,欢迎您,我很高兴并希望更好地编写代码。