Shoud 可以多次处理同一实例
本文关键字:实例 处理 Shoud | 更新日期: 2024-11-07 04:04:37
是否可以多次调用同一IDisposable
实例的.Dispose
而不会引发异常?对此有定义吗?
例如:
public class Test : IDisposable
{
public void Dispose()
{
// What ever
}
}
var t = Test();
t.Dispose();
t.Dispose(); // Should this work in any case?
我问这个的原因:
我已经创建了一些机制,该机制在VisualTree
中搜索从IDisposable
继承的元素,但我不能确定这些元素之一之前是否被释放。
从窗口类中截取的一些代码
/// <summary>
/// Dispose
/// </summary>
public void DisposeAll()
{
foreach (var obj in WPFVisualTreeHelper.FindChildren<IDisposable>(this))
{
if (!disposables.Contains(obj))
{
disposables.Add(obj);
}
}
foreach (IDisposable disposable in disposables)
{
disposable.Dispose();
}
}
谢谢!
如果多次调用对象的 Dispose 方法,则该对象必须忽略第一个调用之后的所有调用。如果多次调用对象的 Dispose 方法,则不得引发异常。当资源已释放时,Dispose 以外的实例方法可能会引发 ObjectDisposedException。
源
MSDN 说:
如果多次调用对象的 Dispose 方法,则不得引发异常。当资源已释放时,Dispose 以外的实例方法可能会引发 ObjectDisposedException。
最后一部分也很重要:确保设置disposed
布尔标志,以确保在调用Dispose
后不会使用资源。您也可以将其用于第二次调用以Dispose
忽略它。