0

第一件事:这是一个紧凑的框架 3.5 应用程序。

我有一个非常奇怪的问题。在 Dispose-Method 中,应用程序在集合中处理项目,然后清除列表。到目前为止,没有什么特别的,当我的应用程序调用 Dispose 时,它​​就像一个魅力。但是一旦垃圾收集器调用终结器,它调用相同的 Dispose-Method,系统就会在通用集合的 Clear-Method 上抛出 NotSupported-Exception。

这是 Dispose-Method 的主体:

public override void Dispose()
{
    if (items != null)
    {
        foreach (Shape item in items)
        {
            item.Dispose();
        }
        items.Clear();
        items = null;
    }
    base.Dispose();
}

我完全被困在这里。也许有人可以向我解释一下,或者有类似的问题并解决了。

4

1 回答 1

0

如果有非托管资源需要清理,终结器只需要调用 Dispose。从终结器调用时,您不能尝试访问托管资源。

正如上面评论中提到的,没有理由 [我们可以看到] 你的类应该实现终结器。

作为参考,如果您需要使用终结器,请使用 Dispose 模式,如下所示:

// The finalizer
~MyClass()
{
    Dispose(false);
}

// The IDisposable implemenation
public void Dispose()
{
    Dispose(true);
    GC.SuppressFinalize(this);
}

// The "real" dispose method
protected virtual void Dispose(bool disposing)
{
    if (!_disposed)
    {
        if (disposing)
        {
            // Dispose managed objects here
        }
        else
        {
            // Free unmanaged resources here
        }
        _disposed = true;
    }
}
于 2012-06-20T19:38:49.500 回答