2012-01-20 4 views
-1

저는 현재 많은 시간마다 여러 번 작업을 수행해야하는 C# 프로젝트에서 작업하고 있습니다.매우 많은 시간마다 여러 번 이벤트를 수행하십시오.

예를 들어 콘솔에 1 초마다 5 번 씁니다. 어떻게이 일을 할 수 있을까요?

도움을 주셔서 감사합니다.

+0

정확히 어떤 문제가 있습니까? 어떻게해야할지 모르십니까? – Oded

+0

루프와 타이머가 가장 친한 친구입니다. –

답변

-2

는이

While (true) 
{ 
for (int i=0; i<5; i++) 
{ 
console ("Hello"); 
} 
//this will pause for 1 sec (1000msec) 
Thread.sleep(1000); 
} 
+0

사용자 인터페이스 스레드에서 작업하는 경우 잠금 상태가되므로 좋지 않습니다. 또한, 만약 두 번째 작업의 1/5이 진행되지 않더라도 OP가 다른 작업을 원한다면 이것은 불가능할 것입니다. 타이머 또는 시간 계수 체크가 더 좋습니다. –

+0

UI가 아닌 스레드에서도 프로덕션 환경에서 수행하면 안되며 어쨌든 타이머처럼 안정적으로 작동하지 않습니다. [More info here] (http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx) –

4

Timer을 사용하고 Timer.Elapsed 이벤트에 바인드 및 이벤트를 사용할 수 있습니다.

using System.Timers; 

샘플 코드 :

Timer timer = new Timer(); 
timer.Elapsed += (sender, eventArgs) => 
{ 
    for (int i = 0; i < 5; i++) 
    { 
     Console.Write(i);    
    } 
}; 

이는 콘솔 응용 프로그램입니다, 또는 당신은 다른 스레드에서이 작업을 실행합니까?

+0

예제 코드에는 간격이 설정되어 있지 않으며 한 번에 다섯 번이 아니라 즉시 실행 행에 다섯 번 씁니다. –

+0

나는이 질문을 초당 5 번 쓴다고 해석했다. 물론 타이머의 간격을 5 분의 1 초로 설정하고이 경우 해당 줄을 솔루션으로 작성할 수 있습니다. – Aphelion

+0

@ dawmail333 간격 및 시작 호출이 누락되었음을 알았지 만 OP는 모든 x에 5 번 씁니다. –

2

이와 같은 짧은 내용의 경우 타이머를 사용하십시오.

System.Threading.Timer

그리고 :

System.Windows.Forms.Timer

전자는 ThreadPool을 사용 후자는 UI 이벤트를 사용하여 선택할 수있는 두 가지 사람이있다. 둘 다 지정할 수있는 기능과 간격 및 콜백 메서드 또는 사용자 지정 코드를 적용하기 위해 연결할 이벤트를 노출합니다.

더 오랜 시간 동안 사용하지 않을 경우 Windows 스케줄러 (OS 1) 또는 Quartz.NET과 같은 스케줄링 프레임 워크를 사용하여 예약하십시오.

는 타이머의 정확도가 달라질 수 있습니다 말고 당신이 할 수 있도록 정말 마진 내에서 인간은,

는 또한 스레드 타이머의 콜백이 임의의 ThreadPool 스레드에서 반환 않습니다 :-) 감지 할 수 실제로 실현하지 않고 코드를 "멀티 스레딩"하게 만듭니다.

System.Timers.Timer도 있으며 이벤트를 노출합니다. 이용 가능한 다른 타이머에 관한 기사 can be found here.

0

내가 당신에 영향을 미칠 것입니다 생각하지 않습니다 노력하지만, 여전히 아는 가치 - 창 리얼 타임 OS 아니다; X 밀리 초마다 수행 할 작업을 요청하면 정확하지 않을 것입니다. 얼마나 많은 작업을 수행 할 것인가는 다양한 작업에 달려 있습니다.

0

스레드를 만들어 실행할 수 있습니다. 많은 프로세싱을하고 싶다면 특히 유용합니다! 다음은 1 초 (1000ms)마다 작업을 수행하는 스레드의 예입니다.

public void Start() 
{ 
    running = true; 
    thread = new Thread(new ParameterizedThreadStart(ThreadFunction)); 
    thread.Start(); 
} 

public virtual void ThreadFunction(object o) 
{ 
    var insert = false; 
    while (running) 
    { 
     //Do work 
     Thread.Sleep(1000); 
    } 
} 
관련 문제