C#serialPort.Open()失败或需要很长时间才能工作

问题描述 投票:0回答:1

我尝试使用蓝牙串口2天,需要等待20分钟到1小时才能让串口真正打开...

serialPort.Open()
由于此异常而失败(端口存在):

抛出异常:System.IO.Ports.dll 中的“System.IO.IOException” Element introuvable。 :'COM5'

我意识到,如果我等这么久,它就可以工作,因为我在午餐时在计算机上设置了断点,然后继续执行。 我尝试使用不同的库,但结果总是相同。 我尝试过不同的波特率等参数...... 当然,设备(HC-05)已正确配对和连接,我已经用 Android 应用程序尝试过,它可以工作。当端口最终接受打开时它也会起作用。 我传递的端口名称是好的,该端口实际上是在设备配对和连接时创建的(它会在设备管理器中弹出) 我的 Windows 安装是全新的,所以没有幽灵串行端口。 代码非常简单:

_serialPort = new SerialPort
{
    BaudRate = 115200
    PortName = BluetoothPortName;
};

while (!_serialPort.IsOpen) // because I want it to finally succeed!
{ 
    try
    {
        _serialPort.Open();
    }
    catch (Exception ex)
    {
        _serialPort.Close();
        Logger.Error(ToString(), $"Failed to open SerialPort : {ex.Message}");
        Thread.Sleep(500);
    }
}
c# bluetooth serial-port
1个回答
0
投票

这是 SerialPort.Open() 挂起时没有“异常”的解决方案。

    private bool _Connect(SerialPort sp)
    {
        try
        {
            Task.Run(() => sp.Open()).Wait(2000);
            if (!sp.IsOpen) 
            { 
                throw new TimeoutException("Port.Open Timeout"); 
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            sp.Close();
            return (sp.IsOpen);
        }
        finally
        {
        }
        return (sp.IsOpen);
    }
© www.soinside.com 2019 - 2024. All rights reserved.