这次很简单的问题。我有一个应用程序与另一台机器上的另一个应用程序副本通信。一个应用程序发送一个相当稳定的数据流,另一个接收它。改善串口连接
发送数据的代码看起来是这样的(其中serialPort
是在C#.NET 2.0 System.IO.Ports.SerialPorts
类的实例):
private void bgDataWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e){
try{
string tempStr = Convert.ToString(String.Format("{0:0.000000}", data));
serialPort.Write(tempStr); // Write "data" out to 6 decimal places
}
catch (TimeoutException){ }
catch (InvalidOperationException err){ // Port is obstructed or closed
this.Invoke((MethodInvoker)delegate{
MessageBox.Show(this, "Couldn't send wireless data:\n\n" +
err.ToString(), "NanoMETER - Wireless Error (Data)",
MessageBoxButtons.OK, MessageBoxIcon.Error);
Global.remoteEna = false;
serialPort.Close();
usingBT = false;
});
}
}
它被称为一个计时器。接收的代码更是直截了当:
private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) {
string buffer = serialPort.ReadExisting();
HandleInput(buffer);
}
数据被发送和处理,这一切都很好,很正常,但有一些不必要的抖动现象,其中它要么不可靠以恒定的速率发送数据,或者它没有拿起一切。我不确定这是否可以在我的代码中修复,或者只是有几台慢速机器和一个可能的Shakey蓝牙连接的性质。有什么建议么?
为什么在定时器上调用它?不应该由事件触发吗? – Fosco 2010-08-19 14:47:20
从定时器调用Bgw DoWork()吗? – 2010-08-19 14:51:37
@Fosco:由于计时器中的事件,数据不断变化。但我认为我得到的是你建议在数据值更新后应该立即调用它。顺便说一句,它仍然是一个计时器,可能没有什么区别,但我理解逻辑。注意:我正在将一个旧的VB6程序改编为C#(一种我不知道2个月前的语言)来实习......因此可能会期望WTF。 – KChaloux 2010-08-19 15:40:07