timer中代码本来就是在独立的线程池线程中运行的
你想实现什么?

解决方案 »

  1.   

    System.Timers.Timer就是在worker thread中执行的。你是在winform designer中拖动的吗?如果是,SynchronizingObject会被自动赋值: If the Timer is used inside Visual Studio in a Windows Forms designer, SynchronizingObject is automatically set to the control that contains the Timer. For example, if you place a Timer on a designer for Form1 (which inherits from Form), the SynchronizingObject property of Timer is set to the instance of Form1.自己new一个Timer试一试。
      

  2.   

    回1楼,System.Threading.Timer也不适用。简单点说T1是做一个业务逻辑,T2是检查一个状态设置一个标志,T1则是根据这个标志判断是否处理业务逻辑。 T1的Interval远比T2的小,所以经常出现该T2修改标志的时候,却没有执行相应的Elapsed事件。
      

  3.   


    相互影响是不是标志位非线程安全导致的?
    可以修改下数据处理流程,使用ManualResetEvent,只有满足条件的情况下,才执行业务逻辑,
    否则就等待信号量,不要执行轮询了
      

  4.   

    一般用一个Timer是够用了的,可以是1毫秒执行一次然后用一个全局变量累计_time++;
    if(_time%200==0){
       记录Time1
    }
    if(_time%1000==0){
       记录Time2
    }
      

  5.   


    相互影响是不是标志位非线程安全导致的?
    可以修改下数据处理流程,使用ManualResetEvent,只有满足条件的情况下,才执行业务逻辑,
    否则就等待信号量,不要执行轮询了T1不会操作标志,只有T2可以操作,T1根据标志判断是否需要执行业务。但已经试了多种方式,经常会出现其中一个Timer事件在执行时,另外一个就不执行,很头疼
      

  6.   


    相互影响是不是标志位非线程安全导致的?
    可以修改下数据处理流程,使用ManualResetEvent,只有满足条件的情况下,才执行业务逻辑,
    否则就等待信号量,不要执行轮询了T1不会操作标志,只有T2可以操作,T1根据标志判断是否需要执行业务。但已经试了多种方式,经常会出现其中一个Timer事件在执行时,另外一个就不执行,很头疼Timer的使用中还要注意重入问题,建议换成线程吧。
      

  7.   

    static bool flag = false;        static void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                if (flag)
                {
                    //log
                    Console.WriteLine("timer1: "+ e.SignalTime.ToLocalTime());
                }
            }        static void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                //check and set flag
                Random random = new Random();            if (random.Next(0, 10) < 5)
                {
                    Console.WriteLine("====================timer2: " + e.SignalTime.ToLocalTime());
                    flag = true;
                }
                else
                {
                    Console.WriteLine("====================timer2: " + e.SignalTime.ToLocalTime());
                    flag = false;
                }
            }        static void Main(string[] args)
            {
                System.Timers.Timer timer1 = new System.Timers.Timer(200);
                System.Timers.Timer timer2 = new System.Timers.Timer(1000);            timer1.Elapsed += timer1_Elapsed;
                timer2.Elapsed += timer2_Elapsed;
                timer1.Start();
                timer2.Start();            Console.Read();
            }
    搂主 你代码是不是这样的? 是的话 timer1有时候不执行是期望的结果啊,因为flag为false了
      

  8.   

    你是不是 timer1的log和timer2的log 都同时对同一个文件进行写操作了?lock下就行了