이 페이지가 유용했습니까?
이 콘텐츠에 대한 여러분의 의견은 중요합니다. 의견을 알려주십시오.
추가 의견
1500자 남음
내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

ThreadStart 대리자

2013-12-13

Thread에서 실행되는 메서드를 나타냅니다.

Namespace:  System.Threading
어셈블리:  mscorlib(mscorlib.dll)

public delegate void ThreadStart()

관리되는 스레드가 만들어지면 스레드에서 실행되는 메서드가 ThreadStart 대리자나 Thread 생성자에 전달되는 ParameterizedThreadStart 대리자로 나타납니다. 스레드는 Thread.Start 메서드가 호출될 때까지 실행을 시작하지 않습니다. 실행은 ThreadStart 또는 ParameterizedThreadStart 대리자로 나타나는 메서드의 첫 줄에서 시작됩니다.

참고참고:

Visual Basic 및 C# 사용자는 스레드를 만들 때 ThreadStart 또는 ParameterizedThreadStart 대리자 생성자를 생략할 수 있습니다. Visual Basic에서는 Thread 생성자에 메서드를 전달할 때 AddressOf 연산자를 사용합니다(예: Dim t As New Thread(AddressOf ThreadProc)). C#에서는 스레드 프로시저의 이름만 지정하면 되고 컴파일러에서 올바른 대리자 생성자를 선택합니다.

이 단원에는 두 예제가 들어 있습니다. 첫 번째 예제에서는 ThreadStart 대리자를 사용하여 정적 메서드를 실행하는 방법을 보여 주고, 두 번째 예제에서는 ThreadStart 대리자를 사용하여 인스턴스 메서드를 실행하는 방법을 보여 줍니다.

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

스레드 작성에 대한 자세한 내용은 [52B32222-E185-4F42-91A7-EACA65C0AB6D]를 참조하세요.

예제 1

다음 코드 예제에서는 ThreadStart 대리자를 사용하여 정적 메서드를 실행하는 방법을 보여 줍니다.


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

다음 코드 예제에서는 ThreadStart 대리자를 사용하여 인스턴스 메서드를 실행하는 방법을 보여 줍니다.


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


Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2015 Microsoft