シリアルポート接続中にC#インターフェイスがフリーズする理由について質問があります。有効なシリアルポート(期待するバイト数を送信するデバイス)に接続しても、インターフェイスがフリーズしません。ただし、ユーザーがコンピューターの別のポートまたはデバイスの間違ったモデルに接続しようとすると、プログラムは「?」を送信したときにデータを返しません。文字などの最初の行:message [i] =(byte)port.BaseStream.ReadByte(); タイムアウトが発生し、キャッチに該当して3回接続を試みてから、接続の失敗をユーザーに警告します。UIは、3回の試行が行われた後は正常に機能しますが、実行中はUIが応答しません。何か案は?よろしくお願いします。以下は私のコードです。
public void windowLoop(object sender, EventArgs e)
{
if (Global.connecting)
{
try
{
if (i == 0) { port.BaseStream.Flush(); port.BaseStream.WriteByte(63); }
message[i] = (byte)port.BaseStream.ReadByte();
if (i == 6)
{
connectAttempts = 1;
i = 0;
String result = Encoding.ASCII.GetString(message);
if (result == "ASUTTON")
{
//connection succeeded
Global.connecting = false;
Global.receiving = true;
setDisplay(2);
}
else
{
//connection failed
Global.connecting = false;
disconnect();
MessageBox.Show(radio, "You are not connection to an Agent (Radio Version)", "Connection Failed", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
else
{
i++;
}
}
catch
{
if (connectAttempts >= connectAttemptsLimit)
{
connectAttempts = 1;
Global.connecting = false;
disconnect();
MessageBox.Show(radio, "Your device failed to connect to the program.", "Connection Failed", MessageBoxButton.OK, MessageBoxImage.Information);
}
else
{
connectAttempts++;
}
}
}
else if (Global.sending)
{
上記は、10ミリ秒ごとに実行するように設定されたDispatcherTimerオブジェクトを介して継続的に実行される私のコードです。