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

Des*_*sMY 6 c# .net-3.5 windows-7

我是新的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;

    }

}
Run Code Online (Sandbox Code Playgroud)

}

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

谁有人可以帮忙?

谢谢

Han*_*ant 5

        mySerialPort.Open();
        richTextBox1.Text = "on";
        mySerialPort.Close();
Run Code Online (Sandbox Code Playgroud)

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

        mySerialPort.Handshake = Handshake.None
Run Code Online (Sandbox Code Playgroud)

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


小智 1

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