デバイスとインターフェイスしているので、シリアルポートで読み取ることができるバイトがあるかどうかを常に確認する方法が必要です。使用できる場合は、それらを読み取ってさまざまな機能を実行する必要があります。作業中のプロジェクトが原因で、さまざまな理由でdata_receivedイベントを作成できません。現在、新しいスレッドで無限ループを実行していますが、コンピューターの速度が低下しています。
他に何かアイデアはありますか?どんな助けでも大歓迎です。以下は私が現在使用している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;
}
}
}