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