2011-10-24 1 views
0

나는 트레이에서 작동하는 C# (Visual Studio)로 작성된 프로그램을 가지고있다. 10 분마다 한 번의 조치를 취하고 싶습니다.C#에서 비동기식 일시 정지를 만드는 방법은 무엇입니까?

while(true) 
{ 
Thread.Sleep(10000); 
// my stuff 
} 

을하지만 그것은 작동하지 않습니다 지금 코드를 다음했다. 그것은 프로그램을 얼려 버린다.

+1

그건 그렇고, 당신은 분이 아니라 10 초 동안 '잠'것입니다. 'Sleep' 메쏘드는 _milliseconds_를 매개 변수로 취합니다. 따라서 10 분 동안 잠자기를 원한다면'Sleep (600000)'이라고 써야합니다. –

답변

6

타이머 개체를 사용하고 while 루프를 만들어야합니다.

System.Timers.Timer _timer = new System.Timers.Timer(); 
_timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed); 
//30 seconds 
_timer.Interval = 30000; 
_timer.Start(); 

private void _timer_Elapsed(object sender, ElapsedEventArgs e) 
{ 
    //do your logic 
} 
+0

System.Timers.Timer 클래스 대신 System.Threading.Timer 클래스를 사용하는 것이 좋습니다. 제프리 리히터 (Jeffrey Richter)의 한 덩어리 ... –

+0

그들 사이의 차이점은 무엇입니까? –

+0

아래 링크는 그들 사이의 차이를 나타냅니다 http://social.msdn.microsoft.com/forums/en/US/csharpgeneral/thread/656f8b0f-77f7-42a7-a34c-0325ffef6c0a –

2

Thread.Sleep은 (는) X 시간 동안 잠을 자고 있습니다. 이 스레드가 프론트 엔드 스레드 (메시지 처리 책임자) 인 경우 스레드를 다시 깨우고 메시지를 처리 ​​할 때까지 이벤트 처리 또는 다시 그리기를위한 메시지가 전달되지 않으므로 실제로 응용 프로그램이 중단됩니다.

10 초마다이 논리를 예약해야합니다.

양식에 타이머를 놓고 10 초마다 실행하도록 지정하십시오. Tick ​​이벤트에서 사용자 지정 작업을 호출하십시오.

1

Thread.Sleep은 현재 스레드를 "중지"합니다. 하나의 스레드 만 있으면 모든 것이 일시 중지됩니다.

달성하고자하는 것은 무엇입니까?

아마도 당신은 두 번째 스레드, 또는 아마도 더 나은 솔루션 조치의 10 분마다

의 트리거 타이머가 필요합니다. Task.StartNew() 또는 ThreadPool

관련 문제