C# 如何发送&;在win forms C的串行端口中接收数据#

C# 如何发送&;在win forms C的串行端口中接收数据#,c#,winforms,serial-port,C#,Winforms,Serial Port,我一直在用Win Forms C#开发一个读卡器应用程序。下面是我的示例代码。它只读取一次并显示messagebox,之后不再显示。DataReceived事件未触发第二次。我在超级终端上测试了它,它工作正常 C#示例代码:- SerialPort port = new SerialPort("COM3", 115200, Parity.Even, 8, StopBits.One); try { if (port.IsOpen == true) port.Close();

我一直在用Win Forms C#开发一个读卡器应用程序。下面是我的示例代码。它只读取一次并显示messagebox,之后不再显示。DataReceived事件未触发第二次。我在超级终端上测试了它,它工作正常

C#示例代码:-

SerialPort port = new SerialPort("COM3", 115200, Parity.Even, 8, StopBits.One);
try
{
    if (port.IsOpen == true)
        port.Close();

    if (!port.IsOpen)
    {
        port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
        port.Open();
        port.WriteLine("RI \n");
        port.WriteLine("R100002 \n");
        port.WriteTimeout = 300;
    }

    port.Close();
}
catch (Exception ex)
{
    port.Close();
    MessageBox.Show(ex.Message);
}

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
   SerialPort sp = (SerialPort)sender;
   MessageBox.Show(sp.ReadExisting());
} 

有人有工作示例代码吗?请分享更正此问题的任何想法。

您将在写入后立即关闭端口。关闭的端口将不会接收传入数据

在完成之前不要关闭端口

以下是我成功测试的读卡器代码:-

我从超级终端上找到了这个组合,只要试试:)-


例如,参见本文。尝试用
Debug.Write
替换您的
MessageBox.Show
。然后在程序运行时查看调试控制台
MessageBox.Show
是一个阻止函数,它阻止线程继续运行,直到用户单击ok。不要使用
DataReceived
事件,请使用
ReadAsync
Wait
。您也没有设置所有必要的串行端口参数,例如,握手配置对于正确使用非常重要。
                port.PortName = txt_Token_port_Name.Text;
                port.BaudRate = Convert.ToInt32(txt_Token_Bud_rate.Text);
                port.Parity = Parity.None;
                port.DataBits = 8;
                port.StopBits = StopBits.One;

                if (port.IsOpen == true)
                    port.Close();

                if (port.IsOpen == false)
                {
                    port.Open();
                    port.ReadTimeout = 3000;
                    port.Write("t\r");
                    port.Write("R1");
                    port.Write("00002");
                    txt_Token_TokenNo.Text = port.ReadLine();

                    port.Close();
                }