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。

希望这对遇到类似问题的人有所帮助。