加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 调用Dispose()后,为什么IsDisposed返回false?

发布时间:2020-12-15 07:40:30 所属栏目:百科 来源:网络整理
导读:我试图清除ToolStripDropDownButton中的所有项目. 由于它们是一次性的,我在每个上面都使用dispose方法. 但是我看到在调用dispose()方法之后,IsDisposed属性仍然返回false. 为什么这样,我如何检查是否在任何对象上调用Dispose()? 在我目前的项目中,这不是一
我试图清除ToolStripDropDownButton中的所有项目.
由于它们是一次性的,我在每个上面都使用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示例中看到,这不是一个简单的方法),或者在你的代码中以某种方式跟踪它.

说了这么多,它在现实场景中很少成为一个问题(尽管知道它是有用的).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读