1

在 C# 中,我的System.IO.Ports.SerialPortWindows 窗体上有一个组件。我的代码中有几个地方像这样循环:

foreach (SerialPort in components.Components)
{
    // Do something.
}

components.Components但是当我运行 a 时,每个 SerialPort 都会从类中删除mySerialPort.Close(),因此所有后续循环都会错过它。这是一个错误吗?还是这是故意的?为什么它会按照设计那样表现?

内部文档说该Close()方法仅处理其中的Stream对象。

4

1 回答 1

1

这是设计使然。与所有其他 .NET 框架类一样,SerialPort.Close() 方法调用其 Dispose() 方法。继承自其基类 Component。它使用处置模式,调用虚拟的 Dispose(bool) 方法。哪个 SerialPort 覆盖以关闭其流。并调用 Component 用来从集合中删除组件的 base.Dispose(bool) 方法。

否则这是自然行为,可以将 SerialPort 拖放到表单上,以便在表单关闭时自动释放它。在创建窗口时打开端口并保持打开直到关闭也是完全正常的。在程序执行中途关闭端口只会引起麻烦。但在其他方面支持,您只需要自己跟踪对象。

于 2012-06-01T17:40:15.600 回答