Thread 클래스

정의

스레드를 만들고 제어하며, 해당 속성을 설정하고, 상태를 가져옵니다.Creates and controls a thread, sets its priority, and gets its status.

public ref class Thread sealed : System::Runtime::ConstrainedExecution::CriticalFinalizerObject
public ref class Thread sealed
public ref class Thread sealed : System::Runtime::InteropServices::_Thread
public ref class Thread sealed : System::Runtime::ConstrainedExecution::CriticalFinalizerObject, System::Runtime::InteropServices::_Thread
public sealed class Thread : System.Runtime.ConstrainedExecution.CriticalFinalizerObject
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Thread
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public sealed class Thread : System.Runtime.InteropServices._Thread
[System.Runtime.InteropServices.ComVisible(true)]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public sealed class Thread : System.Runtime.ConstrainedExecution.CriticalFinalizerObject, System.Runtime.InteropServices._Thread
[System.Runtime.InteropServices.ComVisible(true)]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public sealed class Thread : System.Runtime.ConstrainedExecution.CriticalFinalizerObject
type Thread = class
    inherit CriticalFinalizerObject
[<System.Runtime.InteropServices.ComVisible(true)>]
type Thread = class
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type Thread = class
    interface _Thread
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type Thread = class
    inherit CriticalFinalizerObject
    interface _Thread
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type Thread = class
    inherit CriticalFinalizerObject
Public NotInheritable Class Thread
Inherits CriticalFinalizerObject
Public NotInheritable Class Thread
Public NotInheritable Class Thread
Implements _Thread
Public NotInheritable Class Thread
Inherits CriticalFinalizerObject
Implements _Thread
상속
상속
Thread
특성
구현

예제

다음 예제에서는 간단한 스레딩 기능을 보여 줍니다.The following example demonstrates simple threading functionality.

// [C++]
// Compile using /clr option.
using namespace System;
using namespace System::Threading;

// Simple threading scenario:  Start a Shared method running
// on a second thread.
public ref class ThreadExample
{
public:

   // The ThreadProc method is called when the thread starts.
   // It loops ten times, writing to the console and yielding 
   // the rest of its time slice each time, and then ends.
   static void ThreadProc()
   {
      for ( int i = 0; i < 10; i++ )
      {
         Console::Write(  "ThreadProc: " );
         Console::WriteLine( i );
         
         // Yield the rest of the time slice.
         Thread::Sleep( 0 );

      }
   }

};

int main()
{
   Console::WriteLine( "Main thread: Start a second thread." );
   
   // Create the thread, passing a ThreadStart delegate that
   // represents the ThreadExample::ThreadProc method.  For a 
   // delegate representing a static method, no object is
   // required.
   Thread^ oThread = gcnew Thread( gcnew ThreadStart( &ThreadExample::ThreadProc ) );
   
   // Start ThreadProc.  Note that on a uniprocessor, the new 
   // thread does not get any processor time until the main thread 
   // is preempted or yields.  Uncomment the Thread::Sleep that 
   // follows oThread->Start() to see the difference.
   oThread->Start();
   
   //Thread::Sleep(0);
   for ( int i = 0; i < 4; i++ )
   {
      Console::WriteLine(  "Main thread: Do some work." );
      Thread::Sleep( 0 );

   }
   Console::WriteLine(  "Main thread: Call Join(), to wait until ThreadProc ends." );
   oThread->Join();
   Console::WriteLine(  "Main thread: ThreadProc.Join has returned.  Press Enter to end program." );
   Console::ReadLine();
   return 0;
}

using System;
using System.Threading;

// Simple threading scenario:  Start a static method running
// on a second thread.
public class ThreadExample {
    // The ThreadProc method is called when the thread starts.
    // It loops ten times, writing to the console and yielding
    // the rest of its time slice each time, and then ends.
    public static void ThreadProc() {
        for (int i = 0; i < 10; i++) {
            Console.WriteLine("ThreadProc: {0}", i);
            // Yield the rest of the time slice.
            Thread.Sleep(0);
        }
    }

    public static void Main() {
        Console.WriteLine("Main thread: Start a second thread.");
        // The constructor for the Thread class requires a ThreadStart
        // delegate that represents the method to be executed on the
        // thread.  C# simplifies the creation of this delegate.
        Thread t = new Thread(new ThreadStart(ThreadProc));

        // Start ThreadProc.  Note that on a uniprocessor, the new
        // thread does not get any processor time until the main thread
        // is preempted or yields.  Uncomment the Thread.Sleep that
        // follows t.Start() to see the difference.
        t.Start();
        //Thread.Sleep(0);

        for (int i = 0; i < 4; i++) {
            Console.WriteLine("Main thread: Do some work.");
            Thread.Sleep(0);
        }

        Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
        t.Join();
        Console.WriteLine("Main thread: ThreadProc.Join has returned.  Press Enter to end program.");
        Console.ReadLine();
    }
}
Imports System.Threading

' Simple threading scenario:  Start a Shared method running
' on a second thread.
Public Class ThreadExample
    ' The ThreadProc method is called when the thread starts.
    ' It loops ten times, writing to the console and yielding 
    ' the rest of its time slice each time, and then ends.
    Public Shared Sub ThreadProc()
        Dim i As Integer
        For i = 0 To 9
            Console.WriteLine("ThreadProc: {0}", i)
            ' Yield the rest of the time slice.
            Thread.Sleep(0)
        Next
    End Sub

    Public Shared Sub Main()
        Console.WriteLine("Main thread: Start a second thread.")
        ' The constructor for the Thread class requires a ThreadStart 
        ' delegate.  The Visual Basic AddressOf operator creates this
        ' delegate for you.
        Dim t As New Thread(AddressOf ThreadProc)

        ' Start ThreadProc.  Note that on a uniprocessor, the new 
        ' thread does not get any processor time until the main thread 
        ' is preempted or yields.  Uncomment the Thread.Sleep that 
        ' follows t.Start() to see the difference.
        t.Start()
        'Thread.Sleep(0)

        Dim i As Integer
        For i = 1 To 4
            Console.WriteLine("Main thread: Do some work.")
            Thread.Sleep(0)
        Next

        Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.")
        t.Join()
        Console.WriteLine("Main thread: ThreadProc.Join has returned.  Press Enter to end program.")
        Console.ReadLine()
    End Sub
End Class

이 코드는 다음과 유사한 출력을 생성 합니다.This code produces output similar to the following:

[VB, C++, C#]  
Main thread: Start a second thread.  
Main thread: Do some work.  
ThreadProc: 0  
Main thread: Do some work.  
ThreadProc: 1  
Main thread: Do some work.  
ThreadProc: 2  
Main thread: Do some work.  
ThreadProc: 3  
Main thread: Call Join(), to wait until ThreadProc ends.  
ThreadProc: 4  
ThreadProc: 5  
ThreadProc: 6  
ThreadProc: 7  
ThreadProc: 8  
ThreadProc: 9  
Main thread: ThreadProc.Join has returned.  Press Enter to end program.  

설명

프로세스가 시작 되 면 공용 언어 런타임 애플리케이션 코드를 실행 하는 단일 포그라운드 스레드를 자동으로 만듭니다.When a process starts, the common language runtime automatically creates a single foreground thread to execute application code. 프로세스는이 주 포그라운드 스레드와 함께 프로세스와 관련 된 프로그램 코드의 일부를 실행 하는 스레드를 하나 이상 만들 수 있습니다.Along with this main foreground thread, a process can create one or more threads to execute a portion of the program code associated with the process. 이러한 스레드는 포그라운드 또는 백그라운드에서 실행할 수 있습니다.These threads can execute either in the foreground or in the background. 또한 클래스를 사용 하 여 ThreadPool 공용 언어 런타임에 의해 관리 되는 작업자 스레드에 대해 코드를 실행할 수 있습니다.In addition, you can use the ThreadPool class to execute code on worker threads that are managed by the common language runtime.

섹션 내용In this section

스레드 시작 Starting a thread
스레드 개체 검색 Retrieving Thread objects
포그라운드 및 백그라운드 스레드 Foreground and background threads
문화권 및 스레드 Culture and threads
스레드에 대 한 정보 가져오기 및 제어Getting information about and controlling threads

스레드 시작Starting a thread

스레드가 클래스 생성자에서 실행할 메서드를 나타내는 대리자를 제공 하 여 스레드를 시작 합니다.You start a thread by supplying a delegate that represents the method the thread is to execute in its class constructor. 그런 다음 메서드를 호출 Start 하 여 실행을 시작 합니다.You then call the Start method to begin execution.

Thread생성자는 실행할 메서드에 인수를 전달할 수 있는지 여부에 따라 두 개의 대리자 형식 중 하나를 사용할 수 있습니다.The Thread constructors can take either of two delegate types, depending on whether you can pass an argument to the method to be executed:

  • 메서드에 인수가 없으면 ThreadStart 대리자를 생성자에 전달 합니다.If the method has no arguments, you pass a ThreadStart delegate to the constructor. 다음 서명이 있습니다.It has the signature:

    public delegate void ThreadStart()  
    
    Public Delegate Sub ThreadStart()  
    

    다음 예제에서는 메서드를 실행 하는 스레드를 만들고 시작 합니다 ExecuteInForeground .The following example creates and starts a thread that executes the ExecuteInForeground method. 메서드는 일부 스레드 속성에 대 한 정보를 표시 한 다음 0.5 초 동안 일시 중지 하 고 경과 된 시간 (초)을 표시 하는 루프를 실행 합니다.The method displays information about some thread properties, then executes a loop in which it pauses for half a second and displays the elapsed number of seconds. 스레드가 5 초 이상 실행 되 면 루프가 종료 되 고 스레드가 실행을 종료 합니다.When the thread has executed for at least five seconds, the loop ends and the thread terminates execution.

    using System;
    using System.Diagnostics;
    using System.Threading;
    
    public class Example
    {
       public static void Main()
       {
          var th = new Thread(ExecuteInForeground);
          th.Start();
          Thread.Sleep(1000);
          Console.WriteLine("Main thread ({0}) exiting...", 
                            Thread.CurrentThread.ManagedThreadId); 
       }
       
       private static void ExecuteInForeground()
       {
          DateTime start = DateTime.Now;
          var sw = Stopwatch.StartNew();
          Console.WriteLine("Thread {0}: {1}, Priority {2}", 
                            Thread.CurrentThread.ManagedThreadId,
                            Thread.CurrentThread.ThreadState,
                            Thread.CurrentThread.Priority);
          do { 
             Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds", 
                               Thread.CurrentThread.ManagedThreadId,
                               sw.ElapsedMilliseconds / 1000.0);
             Thread.Sleep(500);
          } while (sw.ElapsedMilliseconds <= 5000);
          sw.Stop(); 
       }
    }
    // The example displays output like the following:
    //       Thread 3: Running, Priority Normal
    //       Thread 3: Elapsed 0.00 seconds
    //       Thread 3: Elapsed 0.51 seconds
    //       Main thread (1) exiting...
    //       Thread 3: Elapsed 1.02 seconds
    //       Thread 3: Elapsed 1.53 seconds
    //       Thread 3: Elapsed 2.05 seconds
    //       Thread 3: Elapsed 2.55 seconds
    //       Thread 3: Elapsed 3.07 seconds
    //       Thread 3: Elapsed 3.57 seconds
    //       Thread 3: Elapsed 4.07 seconds
    //       Thread 3: Elapsed 4.58 seconds
    
    Imports System.Diagnostics
    Imports System.Threading
    
    Module Example
       Public Sub Main()
          Dim th As New Thread(AddressOf ExecuteInForeground)
          th.Start()
          Thread.Sleep(1000)
          Console.WriteLine("Main thread ({0}) exiting...", Thread.CurrentThread.ManagedThreadId) 
       End Sub
       
       Private Sub ExecuteInForeground()
          Dim start As DateTime = DateTime.Now
          Dim sw As Stopwatch = Stopwatch.StartNew()
          Console.WriteLine("Thread {0}: {1}, Priority {2}", 
                            Thread.CurrentThread.ManagedThreadId,
                            Thread.CurrentThread.ThreadState,
                            Thread.CurrentThread.Priority)
          Do 
             Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds", 
                               Thread.CurrentThread.ManagedThreadId,
                               sw.ElapsedMilliseconds / 1000)
             Thread.Sleep(500)
          Loop While sw.ElapsedMilliseconds <= 5000
          sw.Stop() 
       End Sub
    End Module
    ' The example displays output like the following:
    '       Thread 3: Running, Priority Normal
    '       Thread 3: Elapsed 0.00 seconds
    '       Thread 3: Elapsed 0.51 seconds
    '       Main thread (1) exiting...
    '       Thread 3: Elapsed 1.02 seconds
    '       Thread 3: Elapsed 1.53 seconds
    '       Thread 3: Elapsed 2.05 seconds
    '       Thread 3: Elapsed 2.55 seconds
    '       Thread 3: Elapsed 3.07 seconds
    '       Thread 3: Elapsed 3.57 seconds
    '       Thread 3: Elapsed 4.07 seconds
    '       Thread 3: Elapsed 4.58 seconds
    
  • 메서드에 인수가 있는 경우 ParameterizedThreadStart 대리자를 생성자에 전달 합니다.If the method has an argument, you pass a ParameterizedThreadStart delegate to the constructor. 다음 서명이 있습니다.It has the signature:

    public delegate void ParameterizedThreadStart(object obj)  
    
    Public Delegate Sub ParameterizedThreadStart(obj As Object)  
    

    대리자가 실행 하는 메서드는 (c #의 경우) 매개 변수를 적절 한 형식으로 캐스팅 (c #의 경우) 하거나 변환 (Visual Basic) 할 수 있습니다.The method executed by the delegate can then cast (in C#) or convert (in Visual Basic) the parameter to the appropriate type.

    다음 예제는 생성자를 호출 한다는 점을 제외 하 고 이전 예제와 동일 합니다 Thread(ParameterizedThreadStart) .The following example is identical to the previous one, except that it calls the Thread(ParameterizedThreadStart) constructor. 이 버전의 ExecuteInForeground 메서드는 루프가 실행 되는 대략적인 시간 (밀리초)을 나타내는 단일 매개 변수를 포함 합니다.This version of the ExecuteInForeground method has a single parameter that represents the approximate number of milliseconds the loop is to execute.

    using System;
    using System.Diagnostics;
    using System.Threading;
    
    public class Example
    {
       public static void Main()
       {
          var th = new Thread(ExecuteInForeground);
          th.Start(4500);
          Thread.Sleep(1000);
          Console.WriteLine("Main thread ({0}) exiting...", 
                            Thread.CurrentThread.ManagedThreadId); 
       }
       
       private static void ExecuteInForeground(Object obj)
       {
          int interval;
          try {
             interval = (int) obj;
          }
          catch (InvalidCastException) {
             interval = 5000;
          }
          DateTime start = DateTime.Now;
          var sw = Stopwatch.StartNew();
          Console.WriteLine("Thread {0}: {1}, Priority {2}", 
                            Thread.CurrentThread.ManagedThreadId,
                            Thread.CurrentThread.ThreadState,
                            Thread.CurrentThread.Priority);
          do { 
             Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds", 
                               Thread.CurrentThread.ManagedThreadId,
                               sw.ElapsedMilliseconds / 1000.0);
             Thread.Sleep(500);
          } while (sw.ElapsedMilliseconds <= interval);
          sw.Stop(); 
       }
    }
    // The example displays output like the following:
    //       Thread 3: Running, Priority Normal
    //       Thread 3: Elapsed 0.00 seconds
    //       Thread 3: Elapsed 0.52 seconds
    //       Main thread (1) exiting...
    //       Thread 3: Elapsed 1.03 seconds
    //       Thread 3: Elapsed 1.55 seconds
    //       Thread 3: Elapsed 2.06 seconds
    //       Thread 3: Elapsed 2.58 seconds
    //       Thread 3: Elapsed 3.09 seconds
    //       Thread 3: Elapsed 3.61 seconds
    //       Thread 3: Elapsed 4.12 seconds
    
    Imports System.Diagnostics
    Imports System.Threading
    
    Module Example
       Public Sub Main()
          Dim th As New Thread(AddressOf ExecuteInForeground)
          th.Start(4500)
          Thread.Sleep(1000)
          Console.WriteLine("Main thread ({0}) exiting...", Thread.CurrentThread.ManagedThreadId) 
       End Sub
       
       Private Sub ExecuteInForeground(obj As Object)
          Dim interval As Integer
          If IsNumeric(obj) Then
             interval = CInt(obj)
          Else
             interval = 5000
          End If   
          Dim start As DateTime = DateTime.Now
          Dim sw As Stopwatch = Stopwatch.StartNew()
          Console.WriteLine("Thread {0}: {1}, Priority {2}", 
                            Thread.CurrentThread.ManagedThreadId,
                            Thread.CurrentThread.ThreadState,
                            Thread.CurrentThread.Priority)
          Do 
             Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds", 
                               Thread.CurrentThread.ManagedThreadId,
                               sw.ElapsedMilliseconds / 1000)
             Thread.Sleep(500)
          Loop While sw.ElapsedMilliseconds <= interval
          sw.Stop() 
       End Sub
    End Module
    ' The example displays output like the following:
    '       Thread 3: Running, Priority Normal
    '       Thread 3: Elapsed 0.00 seconds
    '       Thread 3: Elapsed 0.52 seconds
    '       Main thread (1) exiting...
    '       Thread 3: Elapsed 1.03 seconds
    '       Thread 3: Elapsed 1.55 seconds
    '       Thread 3: Elapsed 2.06 seconds
    '       Thread 3: Elapsed 2.58 seconds
    '       Thread 3: Elapsed 3.09 seconds
    '       Thread 3: Elapsed 3.61 seconds
    '       Thread 3: Elapsed 4.12 seconds
    

스레드를 시작한 후에는 개체에 대 한 참조를 유지할 필요가 없습니다 Thread .It is not necessary to retain a reference to a Thread object once you have started the thread. 스레드는 스레드 프로시저가 완료 될 때까지 계속 실행 됩니다.The thread continues to execute until the thread procedure is complete.

스레드 개체 검색Retrieving Thread objects

정적 ( Shared Visual Basic) 속성을 사용 하 여 CurrentThread 스레드가 실행 중인 코드에서 현재 실행 중인 스레드에 대 한 참조를 검색할 수 있습니다.You can use the static (Shared in Visual Basic) CurrentThread property to retrieve a reference to the currently executing thread from the code that the thread is executing. 다음 예제에서는 CurrentThread 속성을 기본 애플리케이션 스레드, 다른 포그라운드 스레드, 백그라운드 스레드 및 스레드 풀 스레드에 대 한 정보를 표시 합니다.The following example uses the CurrentThread property to display information about the main application thread, another foreground thread, a background thread, and a thread pool thread.

using System;
using System.Threading;

public class Example
{
   static Object obj = new Object();
   
   public static void Main()
   {
      ThreadPool.QueueUserWorkItem(ShowThreadInformation);
      var th1 = new Thread(ShowThreadInformation);
      th1.Start();
      var th2 = new Thread(ShowThreadInformation);
      th2.IsBackground = true;
      th2.Start();
      Thread.Sleep(500);
      ShowThreadInformation(null); 
   }
   
   private static void ShowThreadInformation(Object state)
   {
      lock (obj) {
         var th  = Thread.CurrentThread;
         Console.WriteLine("Managed thread #{0}: ", th.ManagedThreadId);
         Console.WriteLine("   Background thread: {0}", th.IsBackground);
         Console.WriteLine("   Thread pool thread: {0}", th.IsThreadPoolThread);
         Console.WriteLine("   Priority: {0}", th.Priority);
         Console.WriteLine("   Culture: {0}", th.CurrentCulture.Name);
         Console.WriteLine("   UI culture: {0}", th.CurrentUICulture.Name);
         Console.WriteLine();
      }   
   }
}
// The example displays output like the following:
//       Managed thread #6:
//          Background thread: True
//          Thread pool thread: False
//          Priority: Normal
//          Culture: en-US
//          UI culture: en-US
//       
//       Managed thread #3:
//          Background thread: True
//          Thread pool thread: True
//          Priority: Normal
//          Culture: en-US
//          UI culture: en-US
//       
//       Managed thread #4:
//          Background thread: False
//          Thread pool thread: False
//          Priority: Normal
//          Culture: en-US
//          UI culture: en-US
//       
//       Managed thread #1:
//          Background thread: False
//          Thread pool thread: False
//          Priority: Normal
//          Culture: en-US
//          UI culture: en-US
Imports System.Threading

Module Example
   Private lock As New Object()
                    
   Public Sub Main()
      ThreadPool.QueueUserWorkItem(AddressOf ShowThreadInformation)
      Dim th1 As New Thread(AddressOf ShowThreadInformation)
      th1.Start()
      Dim th2 As New Thread(AddressOf ShowThreadInformation)
      th2.IsBackground = True
      th2.Start()
      Thread.Sleep(500)
      ShowThreadInformation(Nothing) 
   End Sub
   
   Private Sub ShowThreadInformation(state As Object)
      SyncLock lock
         Dim th As Thread = Thread.CurrentThread
         Console.WriteLine("Managed thread #{0}: ", th.ManagedThreadId)
         Console.WriteLine("   Background thread: {0}", th.IsBackground)
         Console.WriteLine("   Thread pool thread: {0}", th.IsThreadPoolThread)
         Console.WriteLine("   Priority: {0}", th.Priority)
         Console.WriteLine("   Culture: {0}", th.CurrentCulture.Name)
         Console.WriteLine("   UI culture: {0}", th.CurrentUICulture.Name)
         Console.WriteLine()
      End SyncLock
   End Sub
End Module
' The example displays output like the following:
'       ' Managed thread #6:
'          Background thread: True
'          Thread pool thread: False
'          Priority: Normal
'          Culture: en-US
'          UI culture: en-US
'       
'       Managed thread #3:
'          Background thread: True
'          Thread pool thread: True
'          Priority: Normal
'          Culture: en-US
'          UI culture: en-US
'       
'       Managed thread #4:
'          Background thread: False
'          Thread pool thread: False
'          Priority: Normal
'          Culture: en-US
'          UI culture: en-US
'       
'       Managed thread #1:
'          Background thread: False
'          Thread pool thread: False
'          Priority: Normal
'          Culture: en-US
'          UI culture: en-US

포그라운드 및 백그라운드 스레드Foreground and background threads

클래스의 인스턴스는 Thread 포그라운드 스레드 또는 백그라운드 스레드를 나타냅니다.Instances of the Thread class represent either foreground threads or background threads. 백그라운드 스레드는 포그라운드 스레드와 동일 합니다. 단, 백그라운드 스레드는 모든 포그라운드 스레드가 종료 된 경우 프로세스를 계속 실행 하지 않습니다.Background threads are identical to foreground threads with one exception: a background thread does not keep a process running if all foreground threads have terminated. 모든 포그라운드 스레드가 중지 되 면 런타임은 모든 백그라운드 스레드를 중지 하 고 종료 됩니다.Once all foreground threads have been stopped, the runtime stops all background threads and shuts down.

기본적으로 다음 스레드는 포그라운드로 실행 됩니다.By default, the following threads execute in the foreground:

  • 기본 애플리케이션 스레드입니다.The main application thread.

  • 클래스 생성자를 호출 하 여 만든 모든 스레드 ThreadAll threads created by calling a Thread class constructor.

다음 스레드는 기본적으로 백그라운드에서 실행 됩니다.The following threads execute in the background by default:

  • 런타임에 의해 유지 관리 되는 작업자 스레드 풀 인 스레드 풀 스레드Thread pool threads, which are a pool of worker threads maintained by the runtime. 클래스를 사용 하 여 스레드 풀을 구성 하 고 스레드 풀 스레드에서 작업을 예약할 수 있습니다 ThreadPool .You can configure the thread pool and schedule work on thread pool threads by using the ThreadPool class.

    참고

    작업 기반 비동기 작업은 스레드 풀 스레드에서 자동으로 실행 됩니다.Task-based asynchronous operations automatically execute on thread pool threads. 작업 기반 비동기 작업에서는 Task 및 클래스를 사용 Task<TResult> 하 여 작업 기반 비동기 패턴을 구현 합니다.Task-based asynchronous operations use the Task and Task<TResult> classes to implement the task-based asynchronous pattern.

  • 관리 되지 않는 코드에서 관리 되는 실행 환경으로 시작 하는 모든 스레드All threads that enter the managed execution environment from unmanaged code.

언제 든 지 속성을 설정 하 여 백그라운드에서 실행 되도록 스레드를 변경할 수 있습니다 IsBackground .You can change a thread to execute in the background by setting the IsBackground property at any time. 백그라운드 스레드는 애플리케이션이 실행 되 고 있지만 종료 파일 시스템 변경 사항 또는 들어오는 소켓 연결을 모니터링 하는 등의 애플리케이션을 중지 되지는 않습니다 있다면 계속 해야 하는 모든 작업에 유용 합니다.Background threads are useful for any operation that should continue as long as an application is running but should not prevent the application from terminating, such as monitoring file system changes or incoming socket connections.

다음 예제에서는 포그라운드 스레드와 백그라운드 스레드 간의 차이점을 보여 줍니다.The following example illustrates the difference between foreground and background threads. 스레드를 시작 하기 전에 백그라운드에서 실행 되도록 스레드를 설정 한다는 점을 제외 하 고는 스레드 시작 섹션의 첫 번째 예제와 같습니다.It is like the first example in the Starting a thread section, except that it sets the thread to execute in the background before starting it. 출력에 표시 된 것 처럼 루프가 5 초 동안 실행 되기 전에 중단 됩니다.As the output shows, the loop is interrupted before it executes for five seconds.

using System;
using System.Diagnostics;
using System.Threading;

public class Example
{
   public static void Main()
   {
      var th = new Thread(ExecuteInForeground);
      th.IsBackground = true;
      th.Start();
      Thread.Sleep(1000);
      Console.WriteLine("Main thread ({0}) exiting...", 
                        Thread.CurrentThread.ManagedThreadId); 
   }
   
   private static void ExecuteInForeground()
   {
      DateTime start = DateTime.Now;
      var sw = Stopwatch.StartNew();
      Console.WriteLine("Thread {0}: {1}, Priority {2}", 
                        Thread.CurrentThread.ManagedThreadId,
                        Thread.CurrentThread.ThreadState,
                        Thread.CurrentThread.Priority);
      do { 
         Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds", 
                           Thread.CurrentThread.ManagedThreadId,
                           sw.ElapsedMilliseconds / 1000.0);
         Thread.Sleep(500);
      } while (sw.ElapsedMilliseconds <= 5000);
      sw.Stop(); 
   }
}
// The example displays output like the following:
//       Thread 3: Background, Priority Normal
//       Thread 3: Elapsed 0.00 seconds
//       Thread 3: Elapsed 0.51 seconds
//       Main thread (1) exiting...
Imports System.Diagnostics
Imports System.Threading

Module Example
   Public Sub Main()
      Dim th As New Thread(AddressOf ExecuteInForeground)
      th.IsBackground = True
      th.Start()
      Thread.Sleep(1000)
      Console.WriteLine("Main thread ({0}) exiting...", Thread.CurrentThread.ManagedThreadId) 
   End Sub
   
   Private Sub ExecuteInForeground()
      Dim start As DateTime = DateTime.Now
      Dim sw As Stopwatch = Stopwatch.StartNew()
      Console.WriteLine("Thread {0}: {1}, Priority {2}", 
                        Thread.CurrentThread.ManagedThreadId,
                        Thread.CurrentThread.ThreadState,
                        Thread.CurrentThread.Priority)
      Do 
         Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds", 
                           Thread.CurrentThread.ManagedThreadId,
                           sw.ElapsedMilliseconds / 1000)
         Thread.Sleep(500)
      Loop While sw.ElapsedMilliseconds <= 5000
      sw.Stop() 
   End Sub
End Module
' The example displays output like the following:
'       Thread 3: Background, Priority Normal
'       Thread 3: Elapsed 0.00 seconds
'       Thread 3: Elapsed 0.51 seconds
'       Main thread (1) exiting...

문화권 및 스레드Culture and threads

각 스레드에는 속성이 나타내는 문화권과 CurrentCulture 속성이 나타내는 UI 문화권이 있습니다 CurrentUICulture .Each thread has a culture, represented by the CurrentCulture property, and a UI culture, represented by the CurrentUICulture property. 현재 문화권은 구문 분석 및 형식 지정, 문자열 비교 및 정렬과 같은 문화권 구분 작업을 지원 하 고 스레드에서 사용 하는 쓰기 시스템과 일정을 제어 합니다.The current culture supports such culture-sensitive operations as parsing and formatting, string comparison and sorting, and also controls the writing system and calendar used by a thread. 현재 UI 문화권은 리소스 파일에서 문화권을 구분 하는 리소스 검색을 제공 합니다.The current UI culture provides for culture-sensitive retrieval of resources in resource files.

중요

CurrentCultureCurrentUICulture 속성은 현재 스레드가 아닌 다른 스레드에서 사용 하는 경우 안정적으로 작동 하지 않습니다.The CurrentCulture and CurrentUICulture properties don't work reliably when used with any thread other than the current thread. .NET Framework에서는 현재 스레드 이외의 스레드에 대해 이러한 속성을 설정 하는 것은 아니지만 이러한 속성을 읽는 것은 안정적입니다.In .NET Framework, reading these properties is reliable, although setting these properties for a thread other than the current thread is not. .NET Core에서 InvalidOperationException 스레드가 다른 스레드에서 이러한 속성을 읽거나 쓰려고 하면이 throw 됩니다.On .NET Core, an InvalidOperationException is thrown if a thread attempts to read or write these properties on a different thread. 및 속성을 사용 하 여 CultureInfo.CurrentCulture 현재 문화권을 검색 하 고 설정 하는 것이 좋습니다 CultureInfo.CurrentUICulture .We recommend that you use the CultureInfo.CurrentCulture and CultureInfo.CurrentUICulture properties to retrieve and set the current culture.

새 스레드를 인스턴스화하면 해당 문화권 및 UI 문화권이 새 스레드가 생성 되는 스레드의 문화권 및 UI 문화권이 아니라 현재 시스템 문화권과 ui 문화권에 의해 정의 됩니다.When a new thread is instantiated, its culture and UI culture are defined by the current system culture and UI culture, and not by the culture and UI culture of the thread from which the new thread is created. 즉, 예를 들어, 현재 시스템 문화권이 영어 (미국) 및 기본 애플리케이션 스레드의 현재 문화권이 프랑스어 (프랑스) 호출 하 여 만든 새 스레드의 문화권은 Thread(ParameterizedThreadStart) 주 스레드에서 생성자 영어 (미국) 및 프랑스어 (프랑스) 되지 됩니다.This means, for example, that if the current system culture is English (United States) and the current culture of the primary application thread is French (France), the culture of a new thread created by calling the Thread(ParameterizedThreadStart) constructor from the primary thread is English (United States), and not French (France). 자세한 내용은 클래스 항목의 "문화권 및 스레드" 섹션을 참조 CultureInfo 하세요.For more information, see the "Culture and threads" section of the CultureInfo class topic.

중요

이는 이상 버전을 대상으로 하는 앱에 대해 비동기 작업을 실행 하는 스레드에는 적용 되지 않습니다 .NET Framework 4.6.NET Framework 4.6 .이 경우 culture 및 UI 문화권이 비동기 작업 컨텍스트의 일부입니다. 기본적으로 비동기 작업을 실행 하는 스레드는 비동기 작업이 시작 된 스레드의 문화권과 UI 문화권을 상속 합니다.This is not true of threads that execute asynchronous operations for apps that target the .NET Framework 4.6.NET Framework 4.6 and later versions, In this case, the culture and UI culture is part of an asynchronous operations' context; the thread on which an asynchronous operation executes by default inherits the culture and UI culture of the thread from which the asynchronous operation was launched. 자세한 내용은 CultureInfo 클래스 항목의 “문화권 및 작업 기반 비동기 작업” 섹션을 참조하세요.For more information, see the "Culture and task-based asynchronous operations" section of the CultureInfo class topic.

하나를 수행 하면 동일한 문화권 및 UI 문화권 공유 애플리케이션에서 실행 중의 모든 스레드가 되도록 합니다.You can do either of the following to ensure that all of the threads executing in an application share the same culture and UI culture:

자세한 내용 및 예제는 클래스 항목의 "문화권 및 스레드" 섹션을 참조 CultureInfo 하세요.For more information and examples, see the "Culture and threads" section of the CultureInfo class topic.

스레드에 대 한 정보 가져오기 및 제어Getting information about and controlling threads

스레드에 대 한 정보를 제공 하는 다양 한 속성 값을 검색할 수 있습니다.You can retrieve a number of property values that provide information about a thread. 경우에 따라이 속성 값을 설정 하 여 스레드 작업을 제어할 수도 있습니다.In some cases, you can also set these property values to control the operation of the thread. 이러한 스레드 속성은 다음과 같습니다.These thread properties include:

  • 이름A name. Name 는 스레드를 식별 하는 데 사용할 수 있는 한 번의 쓰기 속성입니다.Name is a write-once property that you can use to identify a thread. 기본값은 null합니다.Its default value is null.

  • 메서드를 호출 하 여 검색할 수 있는 해시 코드 GetHashCode 입니다.A hash code, which you can retrieve by calling the GetHashCode method. 스레드를 고유 하 게 식별 하려면 해시 코드를 사용할 수 있습니다. 스레드 수명 동안 해당 해시 코드 값을 가져온 애플리케이션 도메인에 관계 없이 다른 스레드에서 값과 충돌 하지 않습니다.The hash code can be used to uniquely identify a thread; for the lifetime of your thread, its hash code will not collide with the value from any other thread, regardless of the application domain from which you obtain the value.

  • 스레드 ID입니다.A thread ID. 읽기 전용 속성의 값은 ManagedThreadId 런타임에 의해 할당 되 고 해당 프로세스 내에서 스레드를 고유 하 게 식별 합니다.The value of the read-only ManagedThreadId property is assigned by the runtime and uniquely identifies a thread within its process.

    참고

    관리되지 않는 호스트가 관리되는 스레드와 관리되지 않는 스레드 간의 관계를 제어할 수 있으므로 운영 체제 ThreadId 는 관리되는 스레드에 대한 고정 관계를 포함하지 않습니다.An operating-system ThreadId has no fixed relationship to a managed thread, because an unmanaged host can control the relationship between managed and unmanaged threads. 특히 정교한 호스트는 CLR 호스팅 API 를 사용 하 여 동일한 운영 체제 스레드에 대해 여러 관리 되는 스레드를 예약 하거나 다른 운영 체제 스레드 간에 관리 되는 스레드를 이동할 수 있습니다.Specifically, a sophisticated host can use the CLR Hosting API to schedule many managed threads against the same operating system thread, or to move a managed thread between different operating system threads.

  • 스레드의 현재 상태입니다.The thread's current state. 존재 기간이 지속 되는 동안 스레드는 항상 속성으로 정의 된 하나 이상의 상태에 ThreadState 있습니다.For the duration of its existence, a thread is always in one or more of the states defined by the ThreadState property.

  • 속성에 의해 정의 되는 예약 우선 순위 수준입니다 ThreadPriority .A scheduling priority level, which is defined by the ThreadPriority property. 스레드의 우선 순위를 요청 하도록이 값을 설정할 수 있지만 운영 체제에서는이 값을 적용 하지 않을 수 있습니다.Although you can set this value to request a thread's priority, it is not guaranteed to be honored by the operating system.

  • IsThreadPoolThread스레드가 스레드 풀 스레드 인지 여부를 나타내는 읽기 전용 속성입니다.The read-only IsThreadPoolThread property, which indicates whether a thread is a thread pool thread.

  • IsBackground 속성The IsBackground property. 자세한 내용은 전경 및 백그라운드 스레드 섹션을 참조 하세요.For more information, see the Foreground and background threads section.

생성자

Thread(ParameterizedThreadStart)

스레드가 시작될 때 개체가 스레드로 전달될 수 있도록 하는 대리자를 지정하여 Thread 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the Thread class, specifying a delegate that allows an object to be passed to the thread when the thread is started.

Thread(ParameterizedThreadStart, Int32)

스레드가 시작될 때 스레드로 개체가 전달될 수 있도록 하는 대리자를 지정하고 스레드의 최대 스택 크기를 지정하여 Thread 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the Thread class, specifying a delegate that allows an object to be passed to the thread when the thread is started and specifying the maximum stack size for the thread.

Thread(ThreadStart)

Thread 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the Thread class.

Thread(ThreadStart, Int32)

스레드의 최대 스택 크기를 지정하여 Thread 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the Thread class, specifying the maximum stack size for the thread.

속성

ApartmentState
사용되지 않습니다.
사용되지 않습니다.

이 스레드의 아파트 상태를 가져오거나 설정합니다.Gets or sets the apartment state of this thread.

CurrentContext

스레드가 실행 중인 현재 컨텍스트를 가져옵니다.Gets the current context in which the thread is executing.

CurrentCulture

현재 스레드에 대한 문화권을 가져오거나 설정합니다.Gets or sets the culture for the current thread.

CurrentPrincipal

스레드의 현재 보안 주체(역할 기반 보안용)를 가져오거나 설정합니다.Gets or sets the thread's current principal (for role-based security).

CurrentThread

현재 실행 중인 스레드를 가져옵니다.Gets the currently running thread.

CurrentUICulture

리소스 관리자가 런타임에 문화권 관련 리소스를 찾기 위해 사용하는 현재 문화권을 가져오거나 설정합니다.Gets or sets the current culture used by the Resource Manager to look up culture-specific resources at run time.

ExecutionContext

현재 스레드의 다양한 컨텍스트 정보를 포함하는 ExecutionContext 개체를 가져옵니다.Gets an ExecutionContext object that contains information about the various contexts of the current thread.

IsAlive

현재 스레드의 실행 상태를 나타내는 값을 가져옵니다.Gets a value indicating the execution status of the current thread.

IsBackground

스레드가 배경 스레드인지를 나타내는 값을 가져오거나 설정합니다.Gets or sets a value indicating whether or not a thread is a background thread.

IsThreadPoolThread

스레드가 관리되는 스레드 풀에 속하는지를 나타내는 값을 가져옵니다.Gets a value indicating whether or not a thread belongs to the managed thread pool.

ManagedThreadId

현재 관리되는 스레드의 고유 식별자를 가져옵니다.Gets a unique identifier for the current managed thread.

Name

스레드의 이름을 가져오거나 설정합니다.Gets or sets the name of the thread.

Priority

스레드의 예약 우선 순위를 나타내는 값을 가져오거나 설정합니다.Gets or sets a value indicating the scheduling priority of a thread.

ThreadState

현재 스레드의 상태를 포함하는 값을 가져옵니다.Gets a value containing the states of the current thread.

메서드

Abort()

이 메서드가 호출되는 스레드에서 ThreadAbortException을 발생시켜 스레드 종료 프로세스를 시작합니다.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread. 이 메서드를 호출하면 대개 스레드가 종료됩니다.Calling this method usually terminates the thread.

Abort(Object)

이 메서드가 호출되는 스레드에서 ThreadAbortException을 발생시켜 스레드 종료 프로세스를 시작하고, 스레드 종료에 대한 예외 정보를 제공합니다.Raises a ThreadAbortException in the thread on which it is invoked, to begin the process of terminating the thread while also providing exception information about the thread termination. 이 메서드를 호출하면 대개 스레드가 종료됩니다.Calling this method usually terminates the thread.

AllocateDataSlot()

모든 스레드에 명명되지 않은 데이터 슬롯을 할당합니다.Allocates an unnamed data slot on all the threads. 성능을 향상시키려면 ThreadStaticAttribute 특성으로 표시된 필드를 대신 사용합니다.For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

AllocateNamedDataSlot(String)

모든 스레드에 명명된 데이터 슬롯을 할당합니다.Allocates a named data slot on all threads. 성능을 향상시키려면 ThreadStaticAttribute 특성으로 표시된 필드를 대신 사용합니다.For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

BeginCriticalRegion()

스레드 중단 또는 처리되지 않은 예외로 인해 애플리케이션 도메인의 다른 작업이 손상될 수 있는 코드 영역이 실행될 수 있다는 사실을 호스트에 알립니다.Notifies a host that execution is about to enter a region of code in which the effects of a thread abort or unhandled exception might jeopardize other tasks in the application domain.

BeginThreadAffinity()

관리되는 코드가 현재 실제 운영 체제 스레드의 ID에 종속되는 명령을 실행하려고 한다는 사실을 호스트에 알립니다.Notifies a host that managed code is about to execute instructions that depend on the identity of the current physical operating system thread.

DisableComObjectEagerCleanup()

현재 스레드에 대해 RCW(런타임 호출 가능 래퍼)의 자동 정리를 해제합니다.Turns off automatic cleanup of runtime callable wrappers (RCW) for the current thread.

EndCriticalRegion()

스레드 중단 또는 처리되지 않은 예외가 현재 작업에만 영향을 주는 코드 영역이 실행될 것임을 호스트에 알립니다.Notifies a host that execution is about to enter a region of code in which the effects of a thread abort or unhandled exception are limited to the current task.

EndThreadAffinity()

관리되는 코드가 현재 실제 운영 체제 스레드의 ID에 종속되는 명령의 실행을 완료했음을 호스트에 알립니다.Notifies a host that managed code has finished executing instructions that depend on the identity of the current physical operating system thread.

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
Finalize()

가비지 컬렉션기에서 Thread 개체를 회수할 때 리소스가 해제되고 다른 정리 작업이 수행되도록 합니다.Ensures that resources are freed and other cleanup operations are performed when the garbage collector reclaims the Thread object.

FreeNamedDataSlot(String)

프로세스의 모든 스레드에 대해 이름과 슬롯 간의 연관을 없앱니다.Eliminates the association between a name and a slot, for all threads in the process. 성능을 향상시키려면 ThreadStaticAttribute 특성으로 표시된 필드를 대신 사용합니다.For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

GetApartmentState()

아파트 상태를 나타내는 ApartmentState 값을 반환합니다.Returns an ApartmentState value indicating the apartment state.

GetCompressedStack()
사용되지 않습니다.

현재 스레드 스택을 캡처하는 데 사용할 수 있는 CompressedStack 개체를 반환합니다.Returns a CompressedStack object that can be used to capture the stack for the current thread.

GetCurrentProcessorId()

현재 스레드가 실행 중인 프로세서를 나타내는 데 사용되는 ID를 가져옵니다.Gets an ID used to indicate on which processor the current thread is executing.

GetData(LocalDataStoreSlot)

현재 스레드의 도메인 내에서 현재 스레드의 지정된 슬롯에서 값을 검색합니다.Retrieves the value from the specified slot on the current thread, within the current thread's current domain. 성능을 향상시키려면 ThreadStaticAttribute 특성으로 표시된 필드를 대신 사용합니다.For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

GetDomain()

현재 스레드가 실행 중인 현재 도메인을 반환합니다.Returns the current domain in which the current thread is running.

GetDomainID()

고유한 애플리케이션 도메인 식별자를 반환합니다.Returns a unique application domain identifier.

GetHashCode()

현재 스레드의 해시 코드를 반환합니다.Returns a hash code for the current thread.

GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetNamedDataSlot(String)

명명된 데이터 슬롯을 찾습니다.Looks up a named data slot. 성능을 향상시키려면 ThreadStaticAttribute 특성으로 표시된 필드를 대신 사용합니다.For better performance, use fields that are marked with the ThreadStaticAttribute attribute instead.

GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
Interrupt()

WaitSleepJoin 스레드 상태에 있는 스레드를 중단합니다.Interrupts a thread that is in the WaitSleepJoin thread state.

Join()

표준 COM 및 SendMessage 펌프를 계속 수행하면서 이 인스턴스가 나타내는 스레드가 종료될 때까지 호출 스레드를 차단합니다.Blocks the calling thread until the thread represented by this instance terminates, while continuing to perform standard COM and SendMessage pumping.

Join(Int32)

표준 COM 및 SendMessage 펌프를 계속 수행하면서 이 인스턴스가 나타내는 스레드가 종료되거나 지정된 시간이 경과할 때까지 호출 스레드를 차단합니다.Blocks the calling thread until the thread represented by this instance terminates or the specified time elapses, while continuing to perform standard COM and SendMessage pumping.

Join(TimeSpan)

표준 COM 및 SendMessage 펌프를 계속 수행하면서 이 인스턴스가 나타내는 스레드가 종료되거나 지정된 시간이 경과할 때까지 호출 스레드를 차단합니다.Blocks the calling thread until the thread represented by this instance terminates or the specified time elapses, while continuing to perform standard COM and SendMessage pumping.

MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
MemoryBarrier()

다음과 같이 메모리 액세스를 동기화합니다. 현재 스레드를 실행 중인 프로세서는 MemoryBarrier()에 대한 호출 이전의 메모리 액세스가 MemoryBarrier()에 대한 호출 이후의 메모리 액세스 뒤에 실행되는 방식으로 명령을 다시 정렬할 수 없습니다.Synchronizes memory access as follows: The processor executing the current thread cannot reorder instructions in such a way that memory accesses prior to the call to MemoryBarrier() execute after memory accesses that follow the call to MemoryBarrier().

ResetAbort()

현재 스레드에 대해 요청된 Abort(Object)를 취소합니다.Cancels an Abort(Object) requested for the current thread.

Resume()
사용되지 않습니다.
사용되지 않습니다.

일시 중단된 스레드를 다시 시작합니다.Resumes a thread that has been suspended.

SetApartmentState(ApartmentState)

스레드를 시작하기 전에 스레드의 아파트 상태를 설정합니다.Sets the apartment state of a thread before it is started.

SetCompressedStack(CompressedStack)
사용되지 않습니다.

캡처한 CompressedStack을 현재 스레드에 적용합니다.Applies a captured CompressedStack to the current thread.

SetData(LocalDataStoreSlot, Object)

해당 스레드의 현재 도메인에 대해 현재 실행 중인 스레드의 지정된 슬롯에서 데이터를 설정합니다.Sets the data in the specified slot on the currently running thread, for that thread's current domain. 성능을 향상시키려면 ThreadStaticAttribute 특성으로 표시된 필드를 대신 사용합니다.For better performance, use fields marked with the ThreadStaticAttribute attribute instead.

Sleep(Int32)

지정된 시간(밀리초) 동안 현재 스레드를 일시 중단합니다.Suspends the current thread for the specified number of milliseconds.

Sleep(TimeSpan)

지정된 시간 동안 현재 스레드를 일시 중단합니다.Suspends the current thread for the specified amount of time.

SpinWait(Int32)

스레드가 iterations 매개 변수에서 정의하는 시간 동안 대기하도록 합니다.Causes a thread to wait the number of times defined by the iterations parameter.

Start()

운영 체제에서 현재 인스턴스의 상태를 Running으로 변경하도록 합니다.Causes the operating system to change the state of the current instance to Running.

Start(Object)

운영 체제에서 현재 인스턴스의 상태를 Running으로 변경하도록 하며 경우에 따라 스레드가 실행하는 메서드에 사용될 데이터가 포함된 개체를 제공합니다.Causes the operating system to change the state of the current instance to Running, and optionally supplies an object containing data to be used by the method the thread executes.

Suspend()
사용되지 않습니다.
사용되지 않습니다.

스레드를 일시 중단하며 스레드가 이미 일시 중단된 경우에는 아무런 효과도 나타나지 않습니다.Either suspends the thread, or if the thread is already suspended, has no effect.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)
TrySetApartmentState(ApartmentState)

스레드를 시작하기 전에 스레드의 아파트 상태를 설정합니다.Sets the apartment state of a thread before it is started.

VolatileRead(Byte)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(Double)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(Int16)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(Int32)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(Int64)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(IntPtr)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(Object)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(SByte)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(Single)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(UInt16)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(UInt32)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(UInt64)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileRead(UIntPtr)

필드의 값을 읽습니다.Reads the value of a field. 이 값은 프로세서 수나 프로세서 캐시의 상태와 관계없이 컴퓨터의 특정 프로세서에서 마지막으로 쓴 값입니다.The value is the latest written by any processor in a computer, regardless of the number of processors or the state of processor cache.

VolatileWrite(Byte, Byte)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(Double, Double)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(Int16, Int16)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(Int32, Int32)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(Int64, Int64)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(IntPtr, IntPtr)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(Object, Object)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(SByte, SByte)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(Single, Single)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(UInt16, UInt16)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(UInt32, UInt32)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(UInt64, UInt64)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

VolatileWrite(UIntPtr, UIntPtr)

이 컴퓨터의 모든 프로세서에서 값을 볼 수 있도록 값을 필드에 즉시 씁니다.Writes a value to a field immediately, so that the value is visible to all processors in the computer.

Yield()

호출 스레드가 현재 프로세서에서 실행할 준비가 되어 있는 다른 스레드에 실행 명령을 내리도록 합니다.Causes the calling thread to yield execution to another thread that is ready to run on the current processor. 운영 체제에서 실행 명령을 내릴 스레드를 선택합니다.The operating system selects the thread to yield to.

명시적 인터페이스 구현

_Thread.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

이름 집합을 해당하는 디스패치 식별자 집합에 매핑합니다.Maps a set of names to a corresponding set of dispatch identifiers.

_Thread.GetTypeInfo(UInt32, UInt32, IntPtr)

인터페이스의 형식 정보를 가져오는 데 사용할 수 있는 개체의 형식 정보를 검색합니다.Retrieves the type information for an object, which can then be used to get the type information for an interface.

_Thread.GetTypeInfoCount(UInt32)

개체에서 제공하는 형식 정보 인터페이스의 수를 검색합니다(0 또는 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

_Thread.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

개체에서 노출하는 메서드와 속성에 대한 액세스를 제공합니다.Provides access to properties and methods exposed by an object.

적용 대상

스레드 보안

이 형식은 스레드로부터 안전합니다.This type is thread safe.

추가 정보