我有一个关于为什么我的 C# 接口在串行端口连接期间冻结的问题。如果我连接到有效的串行端口(我的设备发送我期望的字节数),则接口不会冻结。但是,如果用户尝试连接到计算机上的另一个端口或我的设备型号错误,则程序在发送“?”时不会收到任何数据。字符等第一行: message[i] = (byte)port.BaseStream.ReadByte(); 导致超时并落入我的陷阱并尝试连接 3 次,然后提醒用户连接失败。完成三个尝试后,UI 工作正常,但是当它们进行时,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 对象连续运行。