2012-11-20 6 views
1

에서 사용하는 :어떤 타이머 나는 다음과 같은 <code>do/while</code>이 이러한 맥락

do { 

    //1.look for a report 

    //2.either use interops to run an xl macro report or run a batch file report or run vbs file report 

    //3.then sleep/pause program for 150seconds 

} while (look for next report to run) 

을이 모두가 Console 응용 프로그램을 withing에있다.

150 초 정지/절전 모드는 어떻게 만듭니 까? 2 단계는 다양한 프로세스를 실행하는 과정이 포함될 수 있으며 스레드 안전을 보장하지 않기 때문에 단지 Thread.Sleep을 사용하는 것이 번거로울 수 있습니다.


나는 어떻게 든 CallMeBack 방법 1 단계와 2 단계를 넣어 즉 ​​구조에 코드 이런 종류의 일을해야 하는가? (위의 HERE에서 가져온 것입니다)

static void Main(string[] args) { 
    var t = new System.Timers.Timer(1000); 
    t.Elapsed += (s, e) => CallMeBack(); 
    t.Start(); 

    Console.ReadLine(); 
} 
public static void CallMeBack() { 

    //1.look for a report 
    //2.either use interops to run an xl macro report or run a batch file report or run vbs file report 

    Console.WriteLine("Doing some consuming time work using sleep"); 
} 

이 밀리 초에서 작동

+1

일반적인 접근 방식이 좋습니다. 'while' 루프가 아니라'if (something) {timer.Stop();}'을 가질 것입니다. – Servy

+0

이 구현에서는 작업이 수행 된 시간에 관계없이 150 초마다 호출이 발생합니다. – MrFox

+0

@Servy ... 해결책으로 아이디어를 올리시겠습니까? 패턴을 더 완벽하게 볼 수 있습니까? – whytheq

답변

1

, 당신은 중단됩니다,하지만 일반적으로 발생하지 않는 경우에 그것을 잡을 수 있습니다.

System.Threading.Thread.Sleep(150000); 

편집 :

또 다른 옵션은 단순히 다른 사람이 완료 될 때까지 대기하는 경우에 가입하거나 모든 1백50초 한 번 실행하고자하는 경우, 자신의 대답 일 것이다 사용하는 것입니다. 당신이 묻기 전에 당신이 원하는 것을 알고 있는지 확인하십시오.

당신이 스레드 안전 정지를 사용하려면 다음

task.Wait(150000); 
1

대신 루프의 Timer를 사용합니다. 1 단계와 2 단계는 지정한 간격으로 실행되는 이벤트 내에서 수행됩니다.

반자동 타이머가 필요한 경우 타이머 개체를 자동 재설정하지 않도록 설정하고 대신 이벤트가 끝날 때 수동으로 활성화 할 수 있습니다.

+0

OP에 추가 한 추가 코드를 보았습니까? 당신이 염두에 두었던 것과 같은 것입니다. – whytheq

+0

예, 그렇습니다. – Christoffer