スレッドの使用とスレッド処理Using threads and threading

.NET では、複数の操作を同時に実行するアプリケーションを記述できます。With .NET, you can write applications that perform multiple operations at the same time. 他の操作を止める可能性がある操作は個別のスレッドで実行できます。これはマルチスレッドフリー スレッドと呼ばれているプロセスです。Operations with the potential of holding up other operations can execute on separate threads, a process known as multithreading or free threading.

マルチスレッドを利用するアプリケーションはユーザーの入力に対する応答性が良くなります。プロセッサを集中的に利用するタスクが個別のスレッドで実行されるため、ユーザー インターフェイスの動作が妨げられません。Applications that use multithreading are more responsive to user input because the user interface stays active as processor-intensive tasks execute on separate threads. マルチスレッドはまた、スケーラブルなアプリケーションの開発にも便利です。ワークロードが増えたとき、スレッドを追加できるからです。Multithreading is also useful when you create scalable applications, because you can add threads as the workload increases.

注意

アプリケーションのスレッドの動作をさらに細かく制御するには、スレッドを自分で管理します。If you need more control over the behavior of the application's threads, you can manage the threads yourself. しかし、.NET Framework 4 以降では、System.Threading.Tasks.Parallel クラスおよび System.Threading.Tasks.Task クラス、Parallel LINQ (PLINQ)System.Collections.Concurrent 名前空間の新しい同時実行コレクション クラス、スレッドではなくタスクの概念を基にした新しいプログラミング モデルにより、マルチスレッド プログラミングが大幅に簡略化されています。However, starting with the .NET Framework 4, multithreaded programming is greatly simplified with the System.Threading.Tasks.Parallel and System.Threading.Tasks.Task classes, Parallel LINQ (PLINQ), new concurrent collection classes in the System.Collections.Concurrent namespace, and a new programming model that is based on the concept of tasks rather than threads. 詳細については、「.NET での並列プログラミング」と「タスク並列ライブラリ (TPL)」を参照してください。For more information, see Parallel Programming and Task Parallel Library (TPL).

方法: 新しいスレッドを作成して開始するHow to: Create and start a new thread

System.Threading.Thread クラスの新しいインスタンスを作成し、コンストラクターに対して新しいスレッドで実行するメソッド名を指定して、新しいスレッドを作成します。You create a new thread by creating a new instance of the System.Threading.Thread class and providing the name of the method that you want to execute on a new thread to the constructor. 作成したスレッドを開始するには、Thread.Start メソッドを呼び出します。To start a created thread, call the Thread.Start method. 詳細と例については、「スレッドを作成し、開始時にデータを渡す」の記事と Thread API リファレンスを参照してください。For more information and examples, see the Creating threads and passing data at start time article and the Thread API reference.

方法: スレッドを停止するHow to: Stop a thread

スレッドの実行を終了するには、Thread.Abort メソッドを使用します。To terminate the execution of a thread, use the Thread.Abort method. このメソッドでは、呼び出されたスレッド上で ThreadAbortException が生成されます。That method raises a ThreadAbortException on the thread on which it's invoked. 詳細については、「スレッドの破棄」を参照してください。For more information, see Destroying threads.

.NET Framework 4 以降、System.Threading.CancellationToken を使用してスレッドを協調的にキャンセルできます。Beginning with the .NET Framework 4, you can use the System.Threading.CancellationToken to cancel a thread cooperatively. 詳細については、「マネージド スレッドのキャンセル」を参照してください。For more information, see Cancellation in managed threads.

Thread.Join メソッドを使用すると、そのメソッドが呼び出されたスレッドが終了するまで呼び出し元のスレッドを待機させるようにすることができます。Use the Thread.Join method to make the calling thread wait for the termination of the thread on which the method is invoked.

方法: スレッドを一時停止または中断するHow to: Pause or interrupt a thread

Thread.Sleep メソッドを使用して、現在のスレッドを指定した時間一時停止します。You use the Thread.Sleep method to pause the current thread for a specified amount of time. Thread.Interrupt メソッドを呼び出すことによって、ブロックされたスレッドを中断できます。You can interrupt a blocked thread by calling the Thread.Interrupt method. 詳細については、「スレッドの一時中断と再開」を参照してください。For more information, see Pausing and interrupting threads.

スレッド プロパティThread properties

Thread プロパティの一部を次の表に示します。The following table presents some of the Thread properties:

プロパティProperty 説明Description
IsAlive スレッドが起動していて、正常終了しておらず中止されてもいない場合は、true が返されます。Returns true if a thread has been started and has not yet terminated normally or aborted.
IsBackground スレッドがバックグラウンド スレッドかどうかを示すブール値を取得または設定します。Gets or sets a Boolean that indicates if a thread is a background thread. バックグラウンド スレッドはフォアグラウンド スレッドに似ていますが、プロセスの停止を防ぐことはありません。Background threads are like foreground threads, but a background thread doesn't prevent a process from stopping. あるプロセスに属するフォアグラウンド スレッドがすべて停止すると、共通言語ランタイムは、アライブ状態のバックグラウンド スレッドで Abort メソッドを呼び出し、プロセスを終了します。Once all foreground threads that belong to a process have stopped, the common language runtime ends the process by calling the Abort method on background threads that are still alive. 詳細については、「フォアグラウンド スレッドとバックグラウンド スレッド」を参照してください。For more information, see Foreground and Background Threads.
Name スレッドの名前を取得または設定します。Gets or sets the name of a thread. デバッグ時、個々のスレッドを検出するために頻繁に使用されます。Most frequently used to discover individual threads when you debug.
Priority オペレーティング システムがスレッド スケジュールに優先順位を設定するために使用する ThreadPriority 値を取得または設定します。Gets or sets a ThreadPriority value that is used by the operating system to prioritize thread scheduling. 詳細については、「スレッドのスケジューリング」と ThreadPriority リファレンスを参照してください。For more information, see Scheduling threads and the ThreadPriority reference.
ThreadState スレッドの現在の状態を示す ThreadState 値を取得します。Gets a ThreadState value containing the current states of a thread.

関連項目See also