我正在与设备连接,并需要一种方法来不断检查是否有任何字节可供串口读取,如果有我需要阅读它们并执行不同的功能。由于我正在进行的项目,我无法创建data_received事件。到目前为止,我在一个新的线程中运行了一个无限循环,但它导致计算机的速度变慢。不断检查SerialPort对象以查看是否存在任何字节,如果是,则读取字节并执行功能
有没有人有任何其他的想法?任何帮助表示赞赏。以下是我目前使用的for循环代码。
void bw_DoWork(object sender, DoWorkEventArgs e)
{
object[] parameters = (object[])e.Argument;
SerialPort port = (SerialPort)parameters[0];
agentRadio agentR = (agentRadio)parameters[1];
for (; ;)
{
if (port.IsOpen)
{
try
{
if (port.BytesToRead > 0)
{
byte value = (byte)port.ReadByte();
if (value == Global.OFF_CHAR)
{
port.Close();
Global.isConnected = false;
Form form = new Form();
form.deviceDisconnect(agentR);
MessageBox.Show("Your device has disconnected on its own, due to inactivity or because a key was switched off.", "Device Disconnect", MessageBoxButton.OK, MessageBoxImage.Information);
break;
}
else if (value == Global.WARNING_CHAR[0])
{
if (Global.activeClick)
{
port.BaseStream.Write(Global.POLL_CHAR, 0, Global.POLL_CHAR.Length);
}
}
}
}
catch { }
}
else
{
break;
}
}
}
DataReceived事件专门用于您不必编写这样的代码。删除BytesToRead测试将立即解决您的问题。 – 2012-08-06 17:44:40
感谢您的建议 – 2012-08-06 17:52:47