gpt4 book ai didi

c# - SerialPort UnauthorizedAccessException

转载 作者:可可西里 更新时间:2023-11-01 08:55:58 26 4
gpt4 key购买 nike

偶尔,我的一些集成测试会因上述消息而失败。我正在使用下面的代码来准备端口。

            for(int i = 0; i < 5; i++)
{
try
{
port.Open();
if (port.IsOpen)
break;
}
catch (Exception e)
{
try
{
port.Close();
}
catch (Exception)
{}
Thread.Sleep(300);
}
}

我的假设是,因为它不可能是当前线程阻塞端口(因为它会尝试关闭它),所以它一定是另一个线程或进程在没有正确清理的情况下死亡(其他测试之一 -没有其他访问此端口)。有没有办法重置 SerialPort 的状态,以便新线程/进程可以再次访问它?

谢谢,

理查德

最佳答案

这是 SerialPort 类中的一个缺陷,它使用内部辅助线程来等待端口上的事件。 DataReceived、PinChanged 和 ErrorReceived 事件的来源。该缺陷存在于 Close() 方法实现中,它不会等待此辅助线程终止。这需要时间,确切的时间量是不可预测的,当机器特别忙时可能需要很多秒。在这种情况发生之前,物理端口不会关闭,在线程退出炸弹之前打开端口并出现“端口已在使用”异常。你得到的那个。因此, sleep 300 毫秒是不够的。

这通常不是问题,串行端口不是可共享设备。关闭串行端口而不退出程序是危险的,另一个进程可能会窃取该端口。当您尝试再次打开它时也会给您这个异常。通常的做法是在您的应用程序启动时打开端口,直到应用程序终止才关闭它。

关于c# - SerialPort UnauthorizedAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7348580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com