在C#中,我的窗体上有一个System.IO.Ports.SerialPort
组件。我在我的代码中有几个地方,我像这样循环:
foreach (SerialPort in components.Components)
{
// Do something.
}
但是,当我运行mySerialPort.Close()
时,每个SerialPort都会从components.Components
类中删除,因此所有后续循环都会丢失它。这是一个bug吗?或者这是故意的?为什么它会在设计上表现成这样?
内部文档指出,Close()
方法只处理其中的Stream
对象。
发布于 2012-06-01 17:40:16
这是设计好的。与所有其他.NET框架类一样,SerialPort.Close()方法调用其Dispose()方法。继承自其基类Component。它使用处理模式,调用虚拟处理(Bool)方法。SerialPort重写该参数以关闭其流。并调用组件用来从集合中移除组件的base.Dispose(bool)方法。
这是很自然的行为,SerialPort可以放在表单上,这样当表单关闭时,它就会自动被释放。并且在创建窗口时打开端口并使其保持打开直到关闭也是完全正常的。在程序执行中途关闭端口只会带来麻烦。但在其他情况下是受支持的,您只需要自己跟踪对象。
https://stackoverflow.com/questions/10854864
复制相似问题