문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

Thread.Start 메서드

운영 체제에서 현재 인스턴스의 상태를 ThreadState.Running으로 변경하도록 합니다.

네임스페이스:  System.Threading
어셈블리:  mscorlib(mscorlib.dll)

public void Start()

예외상황
ThreadStateException

트랜잭션이 이미 시작된 경우

OutOfMemoryException

이 스레드를 시작할 충분한 메모리가 없는 경우

스레드가 ThreadState.Running 상태가 되면 운영 체제에서는 해당 스레드의 실행을 예약할 수 있습니다. 스레드는 스레드 생성자에 제공된 ThreadStart 또는 ParameterizedThreadStart 대리자에서 표시하는 메서드의 첫 번째 줄에서 실행을 시작합니다.

참고참고:

ParameterizedThreadStart 대리자를 사용하여 만든 스레드에서 이 오버로드를 사용하면 해당 스레드에서 실행하는 메서드에 null이 전달됩니다.

일단 스레드가 종료되면 다시 Start를 호출하여 다시 시작할 수 없습니다.

이 단원에는 두 개의 코드 예제가 있습니다. 첫 번째 예제에서는 정적 메서드를 실행하는 스레드를 만들고 시작하는 방법을 보여 줍니다. 두 번째 예제에서는 인스턴스 메서드를 실행하는 스레드를 만들고 시작하는 방법을 보여 줍니다.

이 예제에서는 해당 출력을 UI(사용자 인터페이스) 스레드의 TextBlock에 표시합니다. 콜백 스레드에서 TextBlock에 액세스하기 위해 이 예제에서는 Dispatcher 속성을 사용하여 TextBlock에 대한 Dispatcher 개체를 가져온 다음, Dispatcher.BeginInvoke 메서드를 사용하여 크로스 스레드 호출을 수행합니다.

스레드 만들기에 대한 자세한 내용은 스레드 만들기 및 시작할 때 데이터 전달를 참조하십시오.

예제 1

다음 예제에서는 정적 메서드를 실행하는 스레드를 만들고 시작하는 방법을 보여 줍니다.

참고참고:

이 예제를 실행하려면 Demo 메서드 및 TextBlock 컨트롤을 사용하는 예제 빌드를 참조하십시오.


using System;
using System.Threading;

public class Example
{
   private static System.Windows.Controls.TextBlock outputBlock;

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      Example.outputBlock = outputBlock;

      // To start a thread using a static thread procedure, use the
      // class name and method name when you create the ThreadStart
      // delegate. C# expands the method name to the appropriate 
      // delegate creation syntax:
      //    New ThreadStart(Example.DoWork)
      //
      Thread newThread = new Thread(Example.DoWork);
      newThread.Start();
   }

   // Simulate work. To communicate with objects on the UI thread, get the 
   // Dispatcher for one of the UI objects. Use the Dispatcher object's 
   // BeginInvoke method to queue a delegate that will run on the UI thread,
   // and therefore can safely access UI elements like the TextBlock.
   private static void DoWork()
   {
      outputBlock.Dispatcher.BeginInvoke(delegate () { 
         outputBlock.Text += "Hello from a static thread procedure.\n"; 
      });
   }
}

/* This code example produces the following output:

Hello from a static thread procedure.
 */


예제 2

다음 예제에서는 인스턴스 메서드를 실행하는 스레드를 만들고 시작하는 방법을 보여 줍니다.

참고참고:

이 예제를 실행하려면 Demo 메서드 및 TextBlock 컨트롤을 사용하는 예제 빌드를 참조하십시오.


using System;
using System.Threading;

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      // To start a thread using an instance method for the thread 
      // procedure, use the instance variable and method name when 
      // you create the ThreadStart delegate. C# expands the object
      // reference and method name to the appropriate delegate 
      // creation syntax:
      //    New ThreadStart(AddressOf w.DoMoreWork)
      //
      Work w = new Work();
      w.Data = 42;
      w.Output = outputBlock;

      Thread newThread = new Thread(w.DoMoreWork);
      newThread.Start();
   }
}

public class Work
{
   public int Data;
   public System.Windows.Controls.TextBlock Output;

   // Simulate work. To communicate with objects on the UI thread, get the 
   // Dispatcher for one of the UI objects. Use the Dispatcher object's 
   // BeginInvoke method to queue a delegate that will run on the UI thread,
   // and therefore can safely access UI elements like the TextBlock.
   public void DoMoreWork()
   {
      Output.Dispatcher.BeginInvoke(delegate () {
         Output.Text += String.Format("Instance thread procedure. Data={0}\n", Data);
      });
   }
}

// This code example produces the following output:
//
//Instance thread procedure. Data=42


Silverlight

5, 4, 3에서 지원

Windows Phone용 Silverlight

Windows Phone OS 7.1, Windows Phone OS 7.0에서 지원

XNA Framework

Xbox 360, Windows Phone OS 7.0에서 지원

Silverlight에서 지원되는 운영 체제 및 브라우저에 대한 자세한 내용은 지원되는 운영 체제 및 브라우저을 참조하십시오.

커뮤니티 추가 항목

추가
표시: