private void ExecuteUpdate(object obj)
{
 
if( ((int)obj).Equals(15) || 
(DateTime.DaysInMonth(NextDoDateTime.Year,NextDoDateTime.Month) - (int)obj) == 0 )
{
DataAnalyseUpdate();//这个函数执行时间比较长.
}
} private void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
  if( DateTime.Now > NextDoDateTime )
{
object obj = NextDoDateTime.Day;
System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(ExecuteUpdate),obj);
NextDoDateTime = NextDoDateTime.AddDays(1);
}
   }

解决方案 »

  1.   

    timer2.Interval = 5000;可能是我的Interval 时间设短了,然后DataAnalyseUpdate()还没执行完,就又开始执行timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    了,不知道是不是这样的?各位高手来看看呀.急..!!!
      

  2.   

    是有这个可能啊,怎么了?你希望该方法同时只有一个在执行?那就做互斥啊。欢迎大家来我的博客作客:http://blog.csdn.net/aafshzj/
    我正在写一系列关于AAF组件框架的文章。该框架能对开发工作提供很多帮助,并极大地提高开发效率。希望大家看一看并提出宝贵建议。
      

  3.   

    计时器运行于winservice中的一个独立线程,每次timer2_Elapsed是也新开一个线程运行,使用异步控制时,未避免等待的线程过多需要做一个队列,当队列满时直接放弃。
      

  4.   

    to 如果我用异步,是否就没问题呢?问题是同步操作会不会造成冲突,如果冲突的话,则需要采用线程中互斥操作。至于后期互斥处理,则有很多方法,例如:等待线程执行结束,或者采用lock或者mutex等。