C# SerialPort open后,设备重启,再次使用串口提示:请求的资源在使用中

这个问题困扰我很久,网上搜了也找不到解决方法,尝试过各种方法:SerialPort.Close()、SerialPort.Dispose()、重写SerialPort的Dispose()方法、捕获掉口事件,然后执行Close() 等等等

最后在github上找到一个咨询帖:
SerialPort The Requested Resource is in Use

总结一下:SerialPort内部有个BaseStream 属性

public System.IO.Stream BaseStream { get; }

SerialPort对象在Open()后Close()前掉口,内部的BaseStream并未关闭,但由于掉口,SerialPort对象无法访问,因此无法通过SerialPort.BaseStream.Dispose()关闭IO流,所以下次端口出现后,使用SerialPort.Open()就会提示“请求的资源在使用中”

解决办法:

class MyPort
{
	private Stream portBaseStream;
	private SerialPort ComPort;
	public MyPort(...)
	{
		Comport = new SerialPort(...);
	}
	
	public bool Open()
	{
		try
		{
			if(!ComPort.IsOpen)
			{
				try
			    {
			        portBaseStream?.Dispose();
			    }
			    catch{}
				ComPort.Open();
				portBaseStream = ComPort.BaseStream;
			}
			return true;
		}
		catch
		{
			return false;
		}
	}
	...Close Send等方法
}


//使用时
MyPort port = new Myport(...);
port.Open();
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值