gpt4 book ai didi

c# - 我应该什么时候调用 SerialPort.Dispose() 与 SerialPort.Close()?

转载 作者:行者123 更新时间:2023-11-30 14:22:42 38 4
gpt4 key购买 nike

我有一个 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 );
}

关于c# - 我应该什么时候调用 SerialPort.Dispose() 与 SerialPort.Close()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48394289/

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