1. 在彻底销毁前等待排队中的和进行中的回调完成
using (ManualResetEvent waitHandle = new ManualResetEvent(false))
{
//若_timer.Dispose(waitHandle)已被调用过,则会返回false,可以防止重复调用
if (_timer.Dispose(waitHandle))
{
//等待排队中的和正在执行的回调完成,并设置超时
//回调结束时会自动调用waitHandle.Set()来解除阻塞
waitHandle.WaitOne(milliseconds);
}
}
2. 在Dispose后,回调中的ObjectDisposedException异常
try
{
_timer.Change(dueTime, period);
}
catch(ObjectDisposedException)
{
}
参考:
注意Dispose(WaitHandle) 方法的备注Remarks部分
No comments:
Post a Comment