2
我有一个C#应用程序,其中串行(COM1)数据似乎有时不会传输。以下是我的代码的简化段(至textBox中写入电话已被删除):串行数据未在C#应用程序中传输
InitializeComponent()
{
//
// serialPort1
//
this.serialPort1.BaudRate = 115200;
this.serialPort1.DiscardNull = true;
this.serialPort1.ReadTimeout = 500;
this.serialPort1.ReceivedBytesThreshold = 2;
this.serialPort1.WriteTimeout = 500;
this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
}
if (radioButtonUart9600.Checked)
{
serialPort1.BaudRate = 9600;
try
{
serialPort1.Open();
}
catch (SystemException ex)
{
/* ... */
}
}
try
{
serialPort1.Write("D");
serialPort1.Write(msg, 0, 512);
serialPort1.Write("d");
serialPort1.Write(pCsum, 0, 2);
}
catch (SystemException ex)
{
/* ... */
}
奇怪的是,当端口配置为115.2Kbps的相同的代码工作得很好。但是,当以9600bps运行时,应该由此代码传输的数据似乎无法传输。我通过监视远程设备上的接收标志来验证这一点。 try语句中不会引发异常。是否还有其他的事情(Flush等),我应该这样做以确保数据传输?任何想法或建议,你可能会感激。我正在使用Microsoft Visual C#2008 Express Edition。谢谢。
+1,比我的回答好得多 – 2010-05-18 11:37:18
谢谢,汉斯。增加WriteTimeout的确有窍门。为此特定应用程序设置ReceivedBytesThreshold和DiscardNull是故意的。远程设备应该总是发送两个字节的响应,有时它可能会发送空值,无论如何都应该放弃。 – 2010-05-18 13:29:48