Thread クラス

定義

スレッドを作成および制御し、その優先順位の設定およびステータスの取得を実行します。Creates and controls a thread, sets its priority, and gets its status.

public ref class Thread sealed : System::Runtime::ConstrainedExecution::CriticalFinalizerObject, System::Runtime::InteropServices::_Thread
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Thread : System.Runtime.ConstrainedExecution.CriticalFinalizerObject, System.Runtime.InteropServices._Thread
type Thread = class
    inherit CriticalFinalizerObject
    interface _Thread
Public NotInheritable Class Thread
Inherits CriticalFinalizerObject
Implements _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.  

注釈

プロセスが開始されると、共通言語ランタイムによって、アプリケーションコードを実行するためのフォアグラウンドスレッドが自動的に1つ作成されます。When a process starts, the common language runtime automatically creates a single foreground thread to execute application code. プロセスでは、この主要なフォアグラウンドスレッドと共に、プロセスに関連付けられているプログラムコードの一部を実行するために1つ以上のスレッドを作成できます。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 コンストラクターは、次の2つのデリゲート型のどちらかを受け取ることができます。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#は、パラメーターを適切な型にキャスト (では) または変換 (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 メソッドには、ループが実行されるおおよそのミリ秒数を表す1つのパラメーターがあります。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

Static (Shared in 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. バックグラウンドスレッドはフォアグラウンドスレッドと同じですが、例外が1つあります。すべてのフォアグラウンドスレッドが終了した場合、バックグラウンドスレッドはプロセスを実行したままにしません。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.

  • Thread クラスコンストラクターを呼び出すことによって作成されるすべてのスレッド。All 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 プロパティによって表されるカルチャと、CurrentUICulture プロパティによって表される UI カルチャがあります。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.

重要

CurrentCulture プロパティと CurrentUICulture プロパティは、現在のスレッド以外のスレッドで使用する場合、確実に動作しません。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 がスローされます。On .NET Core, an InvalidOperationException is thrown if a thread attempts to read or write these properties on a different thread. CultureInfo.CurrentCultureCultureInfo.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 以降のバージョンを対象とするアプリに対して非同期操作を実行するスレッドには当てはまりません。この場合、カルチャと 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 は、スレッドを識別するために使用できる1回の書き込みプロパティです。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 プロパティによって定義された1つ以上の状態になります。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: Runtime Callable Wrapper) の自動クリーンアップをオフにします。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.

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.

こちらもご覧ください