当垃圾收集器调用clear()时,泛型集合上的NotSupportedException(CF 3.5)

时间:2012-05-04 10:09:44

标签: garbage-collection compact-framework dispose .net-cf-3.5 notsupportedexception

首先:这是一个紧凑的框架3.5应用程序。

我有一个非常奇怪的问题。在Dispose-Method中,应用程序将项目置于集合中,然后清除列表。到目前为止没什么特别的,当我的应用程序调用Dispose时它就像魅力一样。但是,只要垃圾收集器调用Finalizer,它调用相同的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();
}

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

1 个答案:

答案 0 :(得分: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;
    }
}