Raspberry Pi 如何在 .NET 6 中安全地写入 SerialPort
How to safely write to SerialPort in .NET 6 on Raspberry Pi
我正在尝试为 .NET 6 中的串行通信增加一些安全性,但是当没有任何东西连接到端口(在我的测试台上)时,我无法像对 SerialPort.Close()
或SerialPort.Dispose()
挂起。
我已经设法将它减少到以下 MRE,我是 运行 在 Raspberry Pi 4 上 Raspberry Pi OS。我正在将我的应用程序构建为依赖于框架且可移植的应用程序。
using System.IO.Ports;
var sp = new SerialPort("/dev/ttyAMA0", 38400)
{
DataBits = 8,
Parity = Parity.None,
StopBits = StopBits.One,
WriteTimeout = TimeSpan.FromSeconds(3).Seconds,
ReadTimeout = TimeSpan.FromMilliseconds(30).Seconds
};
try
{
sp.Open();
sp.WriteLine("123");
}
catch (Exception) { }
finally
{
Console.WriteLine("Closing");
sp.Close(); //Hangs here
Console.WriteLine("Closed");
Console.ReadLine();
}
我能做些什么来避免我的应用程序挂起吗?
事实证明,Raspberry Pi4已经为蓝牙保留了主UART(/dev/ttyAMA0)。
我需要改用 /dev/ttyS0。
希望这对遇到类似问题的人有所帮助。
我正在尝试为 .NET 6 中的串行通信增加一些安全性,但是当没有任何东西连接到端口(在我的测试台上)时,我无法像对 SerialPort.Close()
或SerialPort.Dispose()
挂起。
我已经设法将它减少到以下 MRE,我是 运行 在 Raspberry Pi 4 上 Raspberry Pi OS。我正在将我的应用程序构建为依赖于框架且可移植的应用程序。
using System.IO.Ports;
var sp = new SerialPort("/dev/ttyAMA0", 38400)
{
DataBits = 8,
Parity = Parity.None,
StopBits = StopBits.One,
WriteTimeout = TimeSpan.FromSeconds(3).Seconds,
ReadTimeout = TimeSpan.FromMilliseconds(30).Seconds
};
try
{
sp.Open();
sp.WriteLine("123");
}
catch (Exception) { }
finally
{
Console.WriteLine("Closing");
sp.Close(); //Hangs here
Console.WriteLine("Closed");
Console.ReadLine();
}
我能做些什么来避免我的应用程序挂起吗?
事实证明,Raspberry Pi4已经为蓝牙保留了主UART(/dev/ttyAMA0)。
我需要改用 /dev/ttyS0。
希望这对遇到类似问题的人有所帮助。