首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SerialPort.Close()从components.Components中删除串行端口

SerialPort.Close()从components.Components中删除串行端口
EN

Stack Overflow用户
提问于 2012-06-02 01:32:41
回答 1查看 1.4K关注 0票数 1

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

代码语言:javascript
运行
复制
foreach (SerialPort in components.Components)
{
    // Do something.
}

但是,当我运行mySerialPort.Close()时,每个SerialPort都会从components.Components类中删除,因此所有后续循环都会丢失它。这是一个bug吗?或者这是故意的?为什么它会在设计上表现成这样?

内部文档指出,Close()方法只处理其中的Stream对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-02 01:40:16

这是设计好的。与所有其他.NET框架类一样,SerialPort.Close()方法调用其Dispose()方法。继承自其基类Component。它使用处理模式,调用虚拟处理(Bool)方法。SerialPort重写该参数以关闭其流。并调用组件用来从集合中移除组件的base.Dispose(bool)方法。

这是很自然的行为,SerialPort可以放在表单上,这样当表单关闭时,它就会自动被释放。并且在创建窗口时打开端口并使其保持打开直到关闭也是完全正常的。在程序执行中途关闭端口只会带来麻烦。但在其他情况下是受支持的,您只需要自己跟踪对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10854864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档