cor*_*ore 4 c# dispose idisposable disposable finalizer
我有一个名为BackgroundWorker有一个线程不断运行的类.要关闭此线程,stop需要命名为的实例变量true.
为了确保在使用完类时释放线程,我添加IDisposable了一个调用的终结器Dispose().假设stop = true确实导致此线程退出,这个sippet是否正确?Dispose从终结器调用是对的,对吧?
终结者应该总是调用,Dispose如果object继承IDisposable,对吧?
/// <summary>
/// Force the background thread to exit.
/// </summary>
public void Dispose()
{
lock (this.locker)
{
this.stop = true;
}
}
~BackgroundWorker()
{
this.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
ned*_*uod 11
首先,一个严重的警告.不要像你一样使用终结器.如果你在终结器中取得锁定,你就会为自己设置一些非常糟糕的效果.短篇小说是不要做的.现在回到原来的问题.
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
/// <summary>
/// Force the background thread to exit.
/// </summary>
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
lock (this.locker)
{
this.stop = true;
}
}
}
~BackgroundWorker()
{
Dispose(false);
}
Run Code Online (Sandbox Code Playgroud)
拥有终结器的唯一原因是允许子类扩展和释放非托管资源.如果你没有子类,那么密封你的班级并完全放弃终结器.
| 归档时间: |
|
| 查看次数: |
3497 次 |
| 最近记录: |