나는 트레이에서 작동하는 C# (Visual Studio)로 작성된 프로그램을 가지고있다. 10 분마다 한 번의 조치를 취하고 싶습니다.C#에서 비동기식 일시 정지를 만드는 방법은 무엇입니까?
while(true)
{
Thread.Sleep(10000);
// my stuff
}
을하지만 그것은 작동하지 않습니다 지금 코드를 다음했다. 그것은 프로그램을 얼려 버린다.
나는 트레이에서 작동하는 C# (Visual Studio)로 작성된 프로그램을 가지고있다. 10 분마다 한 번의 조치를 취하고 싶습니다.C#에서 비동기식 일시 정지를 만드는 방법은 무엇입니까?
while(true)
{
Thread.Sleep(10000);
// my stuff
}
을하지만 그것은 작동하지 않습니다 지금 코드를 다음했다. 그것은 프로그램을 얼려 버린다.
타이머 개체를 사용하고 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
}
System.Timers.Timer 클래스 대신 System.Threading.Timer 클래스를 사용하는 것이 좋습니다. 제프리 리히터 (Jeffrey Richter)의 한 덩어리 ... –
그들 사이의 차이점은 무엇입니까? –
아래 링크는 그들 사이의 차이를 나타냅니다 http://social.msdn.microsoft.com/forums/en/US/csharpgeneral/thread/656f8b0f-77f7-42a7-a34c-0325ffef6c0a –
Thread.Sleep은 (는) X 시간 동안 잠을 자고 있습니다. 이 스레드가 프론트 엔드 스레드 (메시지 처리 책임자) 인 경우 스레드를 다시 깨우고 메시지를 처리 할 때까지 이벤트 처리 또는 다시 그리기를위한 메시지가 전달되지 않으므로 실제로 응용 프로그램이 중단됩니다.
10 초마다이 논리를 예약해야합니다.
양식에 타이머를 놓고 10 초마다 실행하도록 지정하십시오. Tick 이벤트에서 사용자 지정 작업을 호출하십시오.
Thread.Sleep은 현재 스레드를 "중지"합니다. 하나의 스레드 만 있으면 모든 것이 일시 중지됩니다.
달성하고자하는 것은 무엇입니까?
아마도 당신은 두 번째 스레드, 또는 아마도 더 나은 솔루션 조치의 10 분마다의 트리거 타이머가 필요합니다. Task.StartNew() 또는 ThreadPool
그건 그렇고, 당신은 분이 아니라 10 초 동안 '잠'것입니다. 'Sleep' 메쏘드는 _milliseconds_를 매개 변수로 취합니다. 따라서 10 분 동안 잠자기를 원한다면'Sleep (600000)'이라고 써야합니다. –