C#에서 프로그램을 밀리초 단위로 일시 중지하기
C# 프로그램을 지정한 시간(x 밀리초) 동안 일시 중지하려면 Thread.Sleep() 메서드를 사용합니다. 이 메서드는 System.Threading 네임스페이스에 포함되어 있으며, 호출한 현재 스레드의 실행을 지정된 밀리초만큼 차단(blocking)합니다.
예를 들어 1000밀리초(1초) 동안 대기하려면 다음과 같이 작성합니다.
Thread.Sleep(1000);
전체 예제 코드
다음 예제는 자식 스레드(child thread)를 생성한 뒤, for 루프의 각 반복마다 1000밀리초씩 대기하면서 카운터 값을 출력하는 방법을 보여줍니다.
using System;
using System.Threading;
namespace MultithreadingApplication {
public class ThreadCreationProgram {
public static void CallToChildThread() {
try {
Console.WriteLine("자식 스레드 시작");
for (int counter = 0; counter <= 10; counter++) {
Thread.Sleep(1000); // 1초(1000ms) 대기
Console.WriteLine(counter);
}
Console.WriteLine("자식 스레드 완료");
} catch (ThreadAbortException e) {
Console.WriteLine("스레드 중단 예외 발생");
} finally {
Console.WriteLine("스레드 예외를 처리할 수 없습니다");
}
}
public static void Main(string[] args) {
ThreadStart childref = new ThreadStart(CallToChildThread);
Console.WriteLine("Main: 자식 스레드 생성");
Thread childThread = new Thread(childref);
childThread.Start();
// 메인 스레드를 잠시 일시 중지
Thread.Sleep(5000);
}
}
}실행 결과
Main: 자식 스레드 생성 자식 스레드 시작 0 1 2 3 4 5 6 7 8
코드 설명
위 코드의 핵심 흐름은 다음과 같습니다.
1. 자식 스레드 생성: ThreadStart 델리게이트에 CallToChildThread 메서드를 전달하여 새로운 Thread 객체를 만들고 Start() 메서드로 실행합니다.
2. 반복 대기: 자식 스레드 내부의 for 루프에서는 매 반복마다 Thread.Sleep(1000)을 호출해 1초씩 대기한 후 카운터를 출력합니다.
3. 메인 스레드 대기: Main 메서드에서는 Thread.Sleep(5000)을 호출해 메인 스레드를 5초간 멈춥니다. 그 결과 출력이 8까지 표시된 후 프로그램이 종료됩니다.
4. 예외 처리: try-catch-finally 블록을 통해 스레드가 외부에서 강제로 중단(Abort)될 경우 발생하는 ThreadAbortException을 안전하게 처리합니다.
참고 사항
Thread.Sleep()은 호출한 스레드 전체를 차단하므로 UI 스레드에서 사용하면 화면이 멈춘 것처럼 보일 수 있습니다. 비동기(async/await) 환경에서는 스레드를 점유하지 않는 Task.Delay() 사용을 권장합니다.