我有一个名为BackgroundWorker
有一个线程不断运行。要关闭该线程,可以使用名为的实例变量stop
需要是true
.
为了确保在类使用完毕后释放线程,我添加了IDisposable
和一个调用的终结器Dispose()
。假如说stop = true
确实导致该线程退出,这个 sippet 正确吗?调用一下就好了Dispose
来自终结器,对吗?
终结器应该总是调用Dispose
if the object
继承IDisposable
, right?
/// <summary>
/// Force the background thread to exit.
/// </summary>
public void Dispose()
{
lock (this.locker)
{
this.stop = true;
}
}
~BackgroundWorker()
{
this.Dispose();
}
首先,一个严重警告。不要像你一样使用终结器。如果你在终结器中进行锁定,你就会给自己带来一些非常糟糕的影响。简而言之,就是不要这样做。现在回到原来的问题。
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);
}
拥有终结器的唯一原因是允许子类扩展和释放非托管资源。如果您没有子类,则密封您的类并完全删除终结器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)