スレッド処理 (C# および Visual Basic)

スレッド処理を使用すると、Visual Basic または C# プログラムが同時処理を実行し、一度に複数の操作を行うことができるようになります。 たとえば、スレッド処理を使用すると、ユーザー入力を監視したり、バックグラウンド タスクを実行したり、複数の入力ストリームを同時に処理したりできます。

スレッドには、次の特徴があります。

  • スレッドを使用すると、プログラムで同時処理を実行できるようになります。

  • .NET Framework の System.Threading 名前空間により、以前よりも簡単にスレッドを使用できます。

  • スレッドは、アプリケーションのリソースを共有します。 詳細については、「スレッドの使用とスレッド処理」を参照してください。

既定では、Visual Basic または C# プログラムは 1 つのスレッドを使用します。 ただし、補助スレッドを作成して使用することで、プライマリ スレッドと並行してコードを実行することもできます。 これらスレッドは、一般にワーカー スレッドと呼ばれます。

ワーカー スレッドを使用すると、時間がかかるタスクや速度が重視されるタスクを、プライマリ スレッドを停止せずに実行できます。 たとえば、サーバー アプリケーションでは、前の要求が完了するまで待機せずに着信要求を処理できるように、ワーカー スレッドが使用されることがよくあります。 ワーカー スレッドは、デスクトップ アプリケーションで "バックグラウンド" タスクを実行するためにも使用されます。これにより、ユーザー インターフェイス要素を駆動するメイン スレッドがユーザーの操作に応答し続けることができます。

スレッド処理により、スループットと応答性の問題が解決されますが、デッドロックや競合状態など、リソース共有に関する問題の発生原因になることもあります。 複数のスレッドは、ファイル ハンドルやネットワーク接続などのさまざまなリソースを必要とするタスクに最適です。 複数のスレッドを単一のリソースに割り当てると、同期上の問題が発生する可能性があります。また、スレッドを頻繁にブロックしながら他のスレッドを待機するのは、複数のスレッドを使用する趣旨にそぐいません。

ワーカー スレッドは、他のスレッドによって使用されるリソースの多くを必要としない、時間がかかるタスクや速度が重視されるタスクを実行するために使用するのが一般的です。 もちろん、プログラム内の一部のリソースには、複数のスレッドがアクセスする必要があります。 そのために、System.Threading 名前空間には、スレッドの同期に必要なクラスが用意されています。 これらのクラスは、MutexMonitorInterlockedAutoResetEvent、および ManualResetEvent です。

これらのクラスの一部またはすべてを使用して、複数のスレッドの動作を同期できますが、スレッド処理は、Visual Basic または C# 言語によっても一部サポートされています。 たとえば、Visual Basic の SyncLock ステートメント と C# の Lock ステートメントは、Monitor を暗黙に使用して同期機能を実現しています。

注意

.NET Framework Version 4 では、System.Threading.Tasks.Parallel クラスと System.Threading.Tasks.Task クラス、Parallel LINQ (PLINQ)System.Collections.Concurrent 名前空間の新しい同時実行コレクション クラス、およびスレッドではなくタスクの概念に基づく新しいプログラミング モデルによって、マルチスレッド プログラミングが大幅に簡略化されます。 詳細については、「.NET Framework の並列プログラミング」を参照してください。

関連トピック

タイトル

説明

マルチスレッド アプリケーション (C# および Visual Basic)

スレッドの作成方法と使用方法について説明します。

マルチスレッド プロシージャのパラメーターと戻り値 (C# および Visual Basic)

マルチスレッド アプリケーションでのパラメーターの受け渡し方法について説明します。

チュートリアル: BackgroundWorker コンポーネントでのマルチスレッド (C# および Visual Basic)

単純なマルチスレッド アプリケーションの作成方法について説明します。

スレッドの同期 (C# および Visual Basic)

スレッドの対話を制御する方法について説明します。

スレッド タイマー (C# および Visual Basic)

各スレッドのプロシージャを一定の間隔で実行する方法について説明します。

スレッド プール (C# および Visual Basic)

システムによって管理されるワーカー スレッドのプールを使用する方法について説明します。

方法: スレッド プールを使用する (C# および Visual Basic)

スレッド プールの複数のスレッドを同期使用する方法について説明します。

マネージ スレッド処理

.NET Framework にスレッド処理を実装する方法について説明します。

参考書籍の該当する章

C# 3.0 in a Nutshell, Third Edition: A Desktop Quick Reference』の「Threading

C# 3.0 in a Nutshell, Third Edition: A Desktop Quick Reference』の「Asynchronous Methods

C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers』の「Threading and Synchronization