日期:2014-05-19  浏览次数:20877 次

如何避免timer不会在同一时间多次执行函数?
System.Timers.Timer   timer   =   new   System.Timers.Timer();
timer.Start();
timer.Interval   =   1000   *   60   *   1;
timer.Elapsed   +=   new   ElapsedEventHandler(   process   );


我定义一个timer,每隔1分钟就去执行process函数,如何能避免在每次执行前,上次都已经执行完了呢?
也就是说:第一次这个函数还没有执行完,已经到了1分钟了,这个时候怎么避免不让第二次执行呢?

------解决方案--------------------
加个isfinish的全局变量
------解决方案--------------------
en,加个锁啊~
声明个全局的static 的object变量
private static object anyscObj = new object();
在process函数中使用
public void Process()
{
lock(anyscObj)
{
你的函数
}
}
------解决方案--------------------
价格全局变量锁
函数加载时给个值 / 函数完成时 给个空值.

加载函数根据这个变量是否有值来 保证不重复加载
------解决方案--------------------
private void process(object sender, EventArgs e)
{
((Timer)sender).Enabled = false; // 执行前先停止计时
/* TODO */
((Timer)sender).Enabled = true; // 执行后再开始
}