C# 如何发送&;在win forms C的串行端口中接收数据#
我一直在用Win Forms C#开发一个读卡器应用程序。下面是我的示例代码。它只读取一次并显示messagebox,之后不再显示。DataReceived事件未触发第二次。我在超级终端上测试了它,它工作正常 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();
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();
}