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