private static System.Timers.Timer timer0;timer0 = new System.Timers.Timer();
timer0.Interval = 1000*60*5;
timer0.Elapsed += new System.Timers.ElapsedEventHandler(ScheduledWorkCallback);
timer0.Start();
private void ScheduledWorkCallback(object sender, System.Timers.ElapsedEventArgs e)
{
  //执行代码
}现在想知道每5分钟触发的ScheduledWorkCallback过程每次再次触发前检查上个过程是否已运行完,运行完再触发,否则就不触发,怎么办

解决方案 »

  1.   

    用一个标志bool bDoned = true;
      

  2.   

    private void ScheduledWorkCallback(object sender, System.Timers.ElapsedEventArgs e) 

      timer0.Enabled=false;
      //执行代码 
      timer0.Enabled=true;

      

  3.   


    private object m_SyncRoot = new object();private void ScheduledWorkCallback(object sender, System.Timers.ElapsedEventArgs e)
    {
      if(Monitor.TryEnter(m_SyncRoot))
      {
         //执行代码
      }
    }
    用Monitor来同步
      

  4.   

    Monitor.TryEnter 方法 (Object)
    试图获取指定对象的排他锁。返回值
    类型: System.Boolean
    如果当前线程获取该锁,则为 true;否则为 false。如果成功,则此方法将获取 obj 参数上的排他锁。无论锁是否可用,此方法都会立即返回。
    此方法类似于 Enter,但它永远不会阻止。如果在不阻止的情况下线程无法进入,则此方法返回 false,并且线程不会进入临界区。
    http://msdn.microsoft.com/zh-cn/library/4tssbxcw.aspx