[英]When should I call SerialPort.Dispose() vs SerialPort.Close()?
我有一个SerialPort
,我用它连接到虚拟COM端口。 由于连接是持久的,我必须保持对SerialPort
的引用,以便打开,关闭和以其他方式管理端口。 我也在我的类上实现IDisposable
(不是完整的Dispose模式,因为我实际上没有任何适当的非托管资源,只有SerialPort
)。
我的问题与使用SerialPort.Dispose()
和SerialPort.Close()
。 我在几个地方使用Close()
,我从文档中了解到它调用了SerialPort
上的Dispose()
方法。 但是,如果在我的TryConnect()
方法中,有可能从未打开过SerialPort
,那该怎么办呢? 我应该简单地调用Dispose()
,并保留它吗? 或者Close()
方法是更好的选择?
更广泛地说,使用这些方法之一总是一个好主意吗?
我的代码中的一些相关摘要如下。
public bool TryConnect() {
CheckDisposed();
try {
connectedPort = new SerialPort(SelectedPort);
connectedPort.WriteTimeout = 1000;
connectedPort.DataReceived += P_DataReceived;
connectedPort.Open();
return true;
} catch (Exception e) {
if (connectedPort != null) {
connectedPort.Dispose();
connectedPort = null;
}
return false;
}
}
public void Disconnect() {
CheckDisposed();
if (connectedPort != null) {
connectedPort.Close();
connectedPort = null;
}
}
public void Dispose() {
if (!disposed) {
if (connectedPort != null) {
connectedPort.Close();
connectedPort = null;
}
disposed = true;
}
}
调用Close
等于调用Dispose(true)
https://github.com/Microsoft/referencesource/blob/master/System/sys/system/IO/ports/SerialPort.cs
// Calls internal Serial Stream's Close() method on the internal Serial Stream.
public void Close()
{
Dispose();
}
protected override void Dispose( bool disposing )
{
if( disposing ) {
if (IsOpen) {
internalSerialStream.Flush();
internalSerialStream.Close();
internalSerialStream = null;
}
}
base.Dispose( disposing );
}
Close
与此类的Dispose
相同。 使用ILSpy,这是Close
方法的代码:
public void Close()
{
base.Dispose();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.