是否可以在不抛出异常的情况下多次调用.Dispose
同一IDisposable
个实例?对此有一些定义吗?
例如:
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();
}
}
谢谢!
答案 0 :(得分:1)
如果多次调用对象的Dispose方法,则该对象必须忽略第一个之后的所有调用。如果多次调用Dispose方法,则该对象不得抛出异常。除了Dispose之外的实例方法可以在已经处理资源时抛出ObjectDisposedException。
答案 1 :(得分:1)
MSDN说:
如果多次调用Dispose方法,则该对象不得抛出异常。除了Dispose之外的实例方法可以在已经处理资源时抛出ObjectDisposedException。
最后一部分也很重要:确保设置disposed
布尔标志以确保在调用Dispose
后不使用资源。你也可以使用它来第二次调用Dispose
来忽略它。