我试图清除toolstripdropdownButton中的所有项目.
由于它们是一次性的,我在每个上面都使用dispose方法.
但是我看到在调用dispose()方法之后,Isdisposed属性仍然返回false.
为什么这样,我如何检查是否在任何对象上调用dispose()?
在我目前的项目中,这不是一个问题(我希望),但我真的想知道这里发生了什么……
由于它们是一次性的,我在每个上面都使用dispose方法.
但是我看到在调用dispose()方法之后,Isdisposed属性仍然返回false.
为什么这样,我如何检查是否在任何对象上调用dispose()?
在我目前的项目中,这不是一个问题(我希望),但我真的想知道这里发生了什么……
我的代码到目前为止:
private void ClearDropDownAccessConnections() { ToolStripItem button = null; for (int i = toolstripdropdownButtonAccess.DropDownItems.Count - 1; i > 0; i--) { button = toolstripdropdownButtonAccess.DropDownItems[i] as ToolStripItem; if ((button.Tag != null) && ((int)button.Tag == 10)) { toolstripdropdownButtonAccess.DropDownItems.Remove(button); button.dispose(); //IF I CHECk HERE THEN button.Isdisposed IS STILL FALSE } } }
解决方法
无论出于何种原因,原始的.NET开发人员决定只在处置的ToolStripItem具有非null Owner属性(之前你间接设置为空行)时才会翻转Isdisposed标志.这似乎没有任何进一步的影响 – 即你可以假设ToolStripItem安全地处置,尽管这种奇怪的行为.
至于你更广泛的问题 – Idisposable接口没有提供任何方法来检查对象是否被处置(并且更糟糕的是 – 实现它的类不必保证无异常执行,如果它被多次调用(参见MSDN) )).你需要依赖所述类的开发人员来提供一些信息,如果对象实际被处理掉(这可以在ToolStripItem示例中看到,这不是一个简单的方法),或者在你的代码中以某种方式跟踪它.
说了这么多,它在现实场景中很少成为一个问题(尽管知道它是有用的).
原文地址:https://www.jb51.cc/csharp/99096.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。