首先:这是一个紧凑的框架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();
}
我完全被困在这里。也许有人可以向我解释这个问题,或者遇到类似的问题并解决它。
答案 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;
}
}