我正在使用 com0com 创建虚拟端口 comA/comB 的一部分,从 super 终端向 comA 输入输入并在 wpf 应用程序中监听 comB。当我运行以下代码(通过触发 Connect
)时,应用程序成功连接并能够从 comA 获取数据,但当我执行 Disconnect
时挂起。
public void Connect()
{
readPort = new SerialPort("COMB");
readPort.WriteTimeout = 500;
readPort.Handshake = Handshake.None;
readPort.Open();
readThread = new Thread(Read);
readRunning = true;
readThread.Start();
System.Diagnostics.Debug.Print("connected");
}
public void Disconnect()
{
if (!readRunning)
{
readPort.Close();
}
else
{
readRunning = false;
readThread.Join();
readPort.Close();
}
System.Diagnostics.Debug.Print("disconnected");
}
public void Read()
{
while (readRunning)
{
try
{
int readData = 0;
readData = readPort.ReadByte();
System.Diagnostics.Debug.Print("message: " + readData.ToString());
}
catch (TimeoutException)
{
}
}
}
我尝试通过使用将读取函数更改为写入
byte[] writeData = { 1, 2, 3 };
readPort.Write(writeData, 0, 3);
而不是 port.readbyte
,它在断开连接时开始正常工作。有谁知道 readbyte
是否有任何不同可能导致卡住?或者它可能与 com0com 有关?
最佳答案
只是回顾一下,以防万一有人遇到同样的问题,我发现了另一种覆盖 SerialPort.DataReceived
的方法,如下所示:
public override void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
byte[] buf = new byte[sp.BytesToRead];
sp.Read(buf, 0, buf.Length);
receivedDataDel(buf);
}
关于c# - 应用程序在关闭监听端口时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26027584/