使用System.Threading中的timer
Timer tmr = new(new TimerCallBack(DoTimer), state, 0, 100);void DoTimer(object state)
{
    DOSOMETHING();
}DOSOMETHING()的操作时间比timer的时间间隔长,就是说第一次执行DoTimer后,DOSOMETHING开始,当第二次再执行DoTimer时,DOSOMETHING还没有执行完.
怎么做才能在DOSOMETHING执行的时候,再次执行DoTimer时不会同时有两个DOSOMETHING在执行.

解决方案 »

  1.   

    互斥吧...Mutex mx = new Mutex();void DoTimer(object state)
    {
        mx.WaitOne();
        DOSOMETHING();
        mx.ReleaseMutex();
    }            
      

  2.   

    能把你的代码,即DOSOMETHING();里的都贴出来吗...我看下...
      

  3.   

    Timer tmr = new(new TimerCallBack(DoTimer), state, 0, 100);void DoTimer(object state)
    {
    tmr.stop();
        DOSOMETHING();
    tmr.start();
    }
      

  4.   

    测试如下:不加互斥量时:
    class Program
        {
            static void Main()
            {
                Timer tmr = new Timer(new TimerCallback(DoTimer), null , 0, 1000);
                Console.Read();          
            }
            //static Mutex mx = new Mutex();
            static void DoTimer(object state)
            {
                //mx.WaitOne();
                Console.WriteLine("test begin..");
                Thread.Sleep(4000);
                Console.WriteLine("test end...");
                //mx.ReleaseMutex();
            }    }输出如下:
    test begin..
    test begin..
    test begin..
    test begin..
    test begin..
    test end..
    test begin..
    .....
    当加上互斥量时:
        class Program
        {
            static void Main()
            {
                Timer tmr = new Timer(new TimerCallback(DoTimer), null , 0, 1000);
                Console.Read();          
            }
            static Mutex mx = new Mutex();
            static void DoTimer(object state)
            {
                mx.WaitOne();
                Console.WriteLine("test begin..");
                Thread.Sleep(4000);
                Console.WriteLine("test end...");
                mx.ReleaseMutex();
            }    }
    输出如下所示:test begin..
    test end..
    test begin..
    test end ..
    test begin..
    test end ..
    .........
      

  5.   

    我的dosomething是一个关于ic卡读写卡的操作.调用的是第三方的动态库.因为不知道卡机上什么时候有ic卡,于是就设了个定时器过段时间发个指令出去读写一次卡.
      

  6.   

    TO;
    我的dosomething是一个关于ic卡读写卡的操作.调用的是第三方的动态库.因为不知道卡机上什么时候有ic卡,于是就设了个定时器过段时间发个指令出去读写一次卡.好像对用Mutex实现互斥没有太大的影响吧....楼主用Mutex实现不了吗?
      

  7.   

    用Mutex试了不是太管用,可能是我用的问题.问题已解决,用的公司里封装的一个Timer.不会出现我说的情况了.回来研究一下.