情景描述:功能:实现一个Timer定时器,隔一定时间调用函数A, 函数A的主要功能为:到数据中提取一些数据,形成表格,然后遍历表格,利用Web Service 发送到对方,并异步接收返回结果我实现的时候 发现一个问题,第一个定时期周期提取了数据,还没有发送完,第二个周期就开始了,又提取了一次数据,导致数据重复被提取执行。
我的问题是:如果在一个Timer周期内没有执行完毕, 怎样能保证第一次提取执行完毕后,然后再进行第二次周期执行。我的代码为:
timer = new System.Timers.Timer(4000);
        timer.Elapsed += new System.Timers.ElapsedEventHandler(StartWebServicePostFunction); 
        timer.AutoReset = true;
        timer.Enabled = true;(StartWebServicePostFunction 为我处理的函数) 能解决问题的 赶快说一下,   是不是Timer有专门的属性可以控制?大家帮忙啊

解决方案 »

  1.   

    time其实也是启动了一个线程去访问 
    所以防止多线程冲突就要用
    Monitor
    C#中直接用lock就可以了
      

  2.   

    因为你需要在第一个周期完成后在进行第二个周期,可以专门开一个线程,用Thread.Sleep比较容易控制时间。
      

  3.   

    做一个线程
    在使用前判断线程是否在活动
    (GetResultThread == null || !GetResultThread.IsAlive)
      

  4.   

    我不知道  我第一个周期到底需要多长时间 可能是1s 也可能要10s 但是Timer周期是一定的 用lock是 lock 当前Timer使用的对象阿  还是lock Timer对象阿 呵呵 是lock(this) {}  还是lock(timer){} ????????????
      

  5.   

    不知道没有关系,你可以设置一个变量标识前一个活动周期是否得到数据,如果没有得到当前周期就sleep