Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 프로그램을 x 밀리초 동안 일시 중지(Sleep)하는 방법

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() 사용을 권장합니다.