Tuesday, July 21, 2020

Dispose 计时器 System.Threading.Timer 问题

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

一些有用的网站

Windows系统安装界面认不到硬盘,加载RST驱动: https://iknow.lenovo.com.cn/detail/419926.html 纯净版Flash: https://gitlab.com/cleanflash/installer/-/releases    ...