.NET を使用すると、複数の操作を同時に実行するアプリケーションを作成できます。 他の操作を保持する可能性のある操作は、マルチスレッドまたはフリー スレッドと呼ばれるプロセスである個別のスレッドで実行できます。
マルチスレッドを使用するアプリケーションは、プロセッサを集中的に使用するタスクが別々のスレッドで実行されるため、ユーザー インターフェイスはアクティブなままであるため、ユーザー入力に対する応答性が高くなります。 マルチスレッドは、ワークロードの増加に応じてスレッドを追加できるため、スケーラブルなアプリケーションを作成する場合にも役立ちます。
注
アプリケーションのスレッドの動作をより詳細に制御する必要がある場合は、スレッドを自分で管理できます。 ただし、マルチスレッド プログラミングは、 System.Threading.Tasks.Parallel クラスと System.Threading.Tasks.Task クラス、 Parallel LINQ (PLINQ)、 System.Collections.Concurrent 名前空間の同時実行コレクション クラス、スレッドではなくタスクの概念に基づくプログラミング モデルによって大幅に簡略化されています。 詳細については、「 並列プログラミング と タスク並列ライブラリ (TPL)」を参照してください。
方法: 新しいスレッドを作成して開始する
新しいスレッドを作成するには、 System.Threading.Thread クラスの新しいインスタンスを作成します。 新しいスレッドで実行するメソッドの名前をコンストラクターに指定します。 作成されたスレッドを開始するには、 Thread.Start メソッドを呼び出します。 詳細と例については、 開始時刻のスレッドの作成とデータの受け渡し に関する記事と、 Thread API リファレンスを参照してください。
方法: スレッドを停止する
スレッドの実行を終了するには、 System.Threading.CancellationTokenを使用します。 スレッドを協調的に停止するための統一された方法が提供されます。 詳細については、「 マネージド スレッドでの取り消し」を参照してください。
協調的な取り消し用に設計されていないサードパーティのコードを実行するため、スレッドを協調的に停止できない場合があります。 この場合、実行を強制的に終了できます。 スレッドの実行を強制的に終了するには、.NET Framework で Thread.Abort メソッドを使用できます。 そのメソッドは、呼び出されたスレッドで ThreadAbortException を発生させます。 詳細については、「 スレッドの破棄」を参照してください。 Thread.Abort メソッドは.NET Core ではサポートされていません。 .NET Core でサード パーティ製コードの実行を強制的に終了する必要がある場合は、別のプロセスで実行し、 Process.Kill メソッドを使用します。
System.Threading.CancellationTokenは、.NET Framework 4 より前には使用できません。 以前のバージョンの .NET Framework でスレッドを停止するには、スレッド同期手法を使用して、協調的な取り消しを手動で実装します。 たとえば、揮発性のブール型フィールド shouldStop
を作成し、それを使用してスレッドによって実行されるコードに停止を要求できます。 詳細については、「C# リファレンスとSystem.Threading.Volatileの volatile」を参照してください。
Thread.Join メソッドを使用して、呼び出し元のスレッドが停止しているスレッドの終了を待機させます。
方法: スレッドを一時停止または中断する
Thread.Sleep メソッドを使用して、指定した時間、現在のスレッドを一時停止します。 Thread.Interrupt メソッドを呼び出すことで、ブロックされたスレッドを中断できます。 詳細については、「 スレッドの一時停止と中断」を参照してください。
スレッドのプロパティ
次の表に、 Thread プロパティの一部を示します。
プロパティ | 説明 |
---|---|
IsAlive | スレッドが開始され、まだ正常に終了または中止されていない場合に true を返します。 |
IsBackground | スレッドがバックグラウンド スレッドかどうかを示すブール型 (Boolean) の値を取得または設定します。 バックグラウンド スレッドはフォアグラウンド スレッドに似ています。 ただし、バックグラウンド スレッドでは、プロセスが停止するのを防ぐことはありません。 プロセスに属するすべてのフォアグラウンド スレッドが停止すると、共通言語ランタイムは、まだ有効なバックグラウンド スレッドで Abort メソッドを呼び出してプロセスを終了します。 詳細については、「 フォアグラウンド スレッドとバックグラウンド スレッド」を参照してください。 |
Name | スレッドの名前を取得または設定します。 デバッグ時に個々のスレッドを検出するために最も頻繁に使用されます。 |
Priority | スレッド のスケジュール設定の優先順位を付けるためにオペレーティング システムによって使用される ThreadPriority 値を取得または設定します。 詳細については、 スレッドのスケジュール設定 と ThreadPriority リファレンスを参照してください。 |
ThreadState | スレッドの現在の状態を含む ThreadState 値を取得します。 |
こちらも参照ください
.NET