2012-11-29 8 views
6

이것은 다소 간단한 문제이지만, 대답을 찾으려고 할 때마다 Windows 예약 된 작업에 대한 내용이 계속 표시됩니다. 이는 이것이 아닌 것입니다.특정 시간에 메소드 실행 예약.

내 프로그램은 기본적으로 이것이다 말 : 그 코멘트를 대신 넣어 무엇을

void StartDoingThings() 
{ 
    //At Specific System.DateTime 
    DoSomething() 

    //At another specific System.Datetime 
    DoSomethingElse() 
} 

그 방법은 별도의 날짜 시간에 실행시킬 수 있습니다.

Thread.Sleep() 또는 System.Threading.Timers를 사용하여 (DateTimeOfEvent - DateTime.Now)를 기준으로 간격을 계산할 수 있지만 프로그램이 계속 실행되고 있다고 가정하면 다음과 같이 간단하게 말할 수 있습니다. At 2012 년 11 월 30 일 오전 9시 30 분에 DoAnotherThing() 메서드를 수행 하시겠습니까?

+3

quartznet이라는 프레임 워크가 있습니다. http://quartznet.sourceforge.net/ –

+4

예약 된 작업을 계속 볼 수있는 이유는 그것이 정확하게 설계된 작업이기 때문입니다. 일정에 따라 작업을 실행합니다. 각 작업은 각각의 작업 일정에 따라 자체 작업 일정을 정할 수 있으며 스케줄러가 실행할시기를 관리하게 할 수 있습니다. –

+0

그건 내 이해 (어느 쪽이 맞지 않을 수도 있습니다), 그 Windows 작업 예약, "X 시간에,이 프로그램을 실행"이며 아마 그 프로그램과 soemthing 마십시오. 나는 다른 프로그램을 실행하지 않고 있으며, 현재 프로그램 내에서 일정한 시간까지 기다려야한다. 내가 틀렸다면 분명히 이해할 수 있도록 도움을 주지만 이해를 돕기 위해 Windows 작업 스케줄러는 이미 실행중인 프로그램의 특정 부분을 특정 시간에 실행하는 데 도움이되지 않습니다. – Xantham

답변

4

미리 결정된 시간에 무언가를 수행 할 방법을 "예약"하려면 여러 가지 방법이 있습니다. Thread.Sleep()은 아무 것도하지 않는 스레드를 묶어 버리기 때문에 자원 낭비입니다.

일반적으로 정기적 인 시간 예약 (일주일에 한 번)을 수행하고 수행 할 작업의 공유 목록을 검토하는 폴링 방법을 사용합니다. System.Timer는 폴링 방법을 사용할 수 있습니다 :

aTimer = new System.Timers.Timer(10000); 
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 

OnTimedEvent 방법을 수행하는 "작업"의 컬렉션을 유지 코드를 포함 할 수 있습니다. 작업 시간이 다가 오면 다음 타이머 실행으로 타이머가 실행됩니다.

+0

그래서 dateTime 객체 만 주어진다면 아무 일도 없을 것입니다. 특정 DateTime에서 작업을 수행하는 것이 일반적인 일처럼 보입니다. 프로그램의 일부 작업은 몇 초에서 최대 몇 시간까지 지연 될 수 있으며 모든 작업을 확인하도록 분명히 말하고 있습니다 두 번째는 아마 필요한 것보다 더 많은 자원을 소비합니다. – Xantham

+0

나는 그것이 내장되어 있지 않은 이유는 시스템 시간이 변경되어 오용 될 수 없다는 것입니다 ( –

+0

) 그건 의미가 있습니다.하지만 나는 그런 변화가 위험하다고 생각할 것입니다. 시간 초과 작업을하면서 시스템 시간.그것은 단지 시간의 동기화 변경 이었다면 정확한 시간 (시간 동기화 중에 건너 뛸 수 있음)을 기다리지 않고 if (time> set_time)를 실행하는 것으로 생각할 것입니다. – Xantham

관련 문제