2014-03-25 2 views
0

문제가 있습니다. 두 개의 Timer 객체를 만들었습니다. 하나는 설정 한 시간마다 메서드를 실행하고 두 번째는 그 시간을 변경합니다. 문제는 이것입니다 : 첫 번째 타이머의 간격을 두 번째에서 변경하려고하면 메서드가 변경 될 때 첫 번째 타이머를 실행하고 싶지 않습니다.다른 타이머에서 시간 초과 스레드 간격을 변경하는 방법은 무엇입니까?

다음 코드가 있습니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public void someFun1(Object obj) 
     { 
      Console.WriteLine("Start1 " + DateTime.Now); 

     } 

     public void changeTime1(Object obj) 
     { 
      someTime1.Change(0, 2000); 
     } 

     public static TimerCallback somedel1; 
     public static Timer someTime1; 

     public static TimerCallback changeTimedel1; 
     public static Timer changerTimer1; 

     static void Main(string[] args) 
     { 
      Program pr = new Program(); 

      somedel1 = new TimerCallback(pr.someFun1); 
      someTime1 = new Timer(somedel1, null, Timeout.Infinite, 10000); 


      changeTimedel1 = new TimerCallback(pr.changeTime1); 
      changerTimer1 = new Timer(changeTimedel1, null, 0, 10); 


      Console.ReadLine(); 
     } 
    } 
} 

답변

0

시도가 dueTime을 계산하기 위해?

class Program 
    { 
     static DateTime _lastInvokation; 
     static int somedelInterval = 10000; 

     public void someFun1(Object obj) 
     { 
      Console.WriteLine("Start1 " + DateTime.Now); 
      _lastInvokation = DateTime.Now; 
     } 

     public void changeTime1(Object obj) 
     { 
      int dueTime = somedelInterval - (int)(DateTime.Now - _lastInvokation).TotalMilliseconds; 
      somedelInterval = 2000; 
      if (dueTime > 0) 
       someTime1.Change(dueTime, somedelInterval); 
     } 

     public static TimerCallback somedel1; 
     public static Timer someTime1; 

     public static TimerCallback changeTimedel1; 
     public static Timer changerTimer1; 

     static void Main(string[] args) 
     { 
      Program pr = new Program(); 

      somedel1 = new TimerCallback(pr.someFun1); 
      someTime1 = new Timer(somedel1, null, Timeout.Infinite, somedelInterval); 
      _lastInvokation = DateTime.Now; 

      changeTimedel1 = new TimerCallback(pr.changeTime1); 
      changerTimer1 = new Timer(changeTimedel1, null, 0, 10); 


      Console.ReadLine(); 
     } 
    } 
+0

을하지만이 작동하지 않습니다 ( – user3458708

+0

을 좋아, 당신은 타이머의 현재 상태를 저장해야 할 내 게시물을 편집 한 – Alex

관련 문제