C #에서 프로그램에 지연을 추가하려면 어떻게해야합니까?
C #에서 프로그램에 지연을 추가하려면 어떻게해야합니까?
답변:
Thread.Sleep()
예를 들어 기능을 사용할 수 있습니다
int milliseconds = 2000;
Thread.Sleep(milliseconds);
있음이 완전히 중지 2 초 현재 스레드의 실행.
아마도 가장 적합한 시나리오 Thread.Sleep
는 메인과 다른 다른 스레드에서 작업을 지연하려는 경우입니다.
MAIN THREAD --------------------------------------------------------->
(UI, CONSOLE ETC.) | |
| |
OTHER THREAD ----- ADD A DELAY (Thread.Sleep) ------>
다른 시나리오 (예 : 시간이 지난 후 작업 시작 등)의 경우 Cody 's answer를 확인하십시오 .
await Task.Delay(milliseconds)
. 이것은 나를 위해 일했다 :)
간격이 2-3 초로 설정된 타이머를 사용하십시오.
작성중인 응용 프로그램 유형에 따라 세 가지 옵션 중에서 선택할 수 있습니다.
Thread.Sleep
스레드를 Sleep
완전히 잠그고 다른 메시지를 처리하지 못하도록 응용 프로그램에서 해당 스레드의 입력 (WinForms, WPF)을 동시에 처리해야하는 경우 사용하지 마십시오 . 단일 스레드 응용 프로그램 (대부분의 경우)을 가정하면 의도 한대로 작업을 지연시키는 것이 아니라 전체 응용 프로그램의 응답이 중지됩니다. 처리하거나 별도의 스레드에 "이벤트"가 없기 때문에 순수 콘솔 응용 프로그램에서 절전 모드를 사용하는 Task.Delay
것이 좋습니다 (또한 더 나은 옵션 임).
및 타이머뿐만 아니라 Sleep
당신이 사용할 수있는 Task.Delay
비동기 버전 인 Sleep
이벤트를 처리에서 스레드를 차단하지 않는 (적절하게 사용하는 경우를 -로 무한 잠을 끄지 마십시오 .Wait()
).
public async void ClickHandler(...)
{
// whatever you need to do before delay goes here
await Task.Delay(2000);
// whatever you need to do after delay.
}
C # 7.1 ( MSDN 블로그의 Async main)을 사용하는 경우 콘솔 응용 프로그램 await Task.Delay(2000)
의 Main
방법 에서도 동일 하게 사용할 수 있습니다 .
참고 : 작업 지연 Sleep
은 timer /로 여러 작업을 잠재적으로 시작할 때 발생하는 경쟁 조건을 피하는 이점이 Delay
있습니다. 불행히도 UI 기반 응용 프로그램을 동결하는 것은 허용되지 않으므로 여러 지연을 시작하면 (예 : 버튼 클릭으로 트리거되는 경우) 어떤 버튼을 사용하지 않도록 설정하거나 타이머 / 작업을 취소하거나 지연되도록하십시오 안전하게 여러 번 작업을 수행 할 수 있습니다.
Thread.Sleep
경고가 중요하지 않을 수 있습니다.
await Task.Delay()
콘솔 응용 프로그램이 실제로 가능성이 있다는 버전 및 인라인 주석을 원하는 사용 Sleep
(비 비동기 Main
) 또는 Delay
(비동기 Main
)
System.Threading.Thread.Sleep(
(int)System.TimeSpan.FromSeconds(3).TotalMilliseconds);
또는 using
진술로 :
Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);
나는이 선호하는 1000 * numSeconds
(또는 간단히 3000
)는 사용하지 않은 사람에게 무슨 일이 일어나고 있는지 더 분명하게하기 때문에 Thread.Sleep
전에. 의도를 더 잘 문서화합니다.
Thread.Sleep(TimeSpan)
int로 캐스트하지 않고 직접 사용할 수 있습니다 .