アプリケーションのスレッドの動作をもっと細かく制御する必要がある場合は、スレッドそのものを管理します。ただし、マルチスレッド アプリケーションを正しく作成することは簡単ではありません。競合状態の発生によってアプリケーションが応答しなくなることや一時的なエラーが発生することがあります。詳細については、「スレッドセーフ コンポーネント」を参照してください。
Visual Basic で新規スレッドを作成するには、Thread 型の変数を宣言し、AddressOf ステートメントおよび新規スレッドで実行するプロシージャ名またはメソッド名を使用してコンストラクタを呼び出します。次に例を示します。
Dim TestThread As New System.Threading.Thread(AddressOf TestSub)
スレッドの開始と停止
新規スレッドの実行を開始するには、次のコードに示すように Start メソッドを使用します。
スレッドの実行を停止するには、次のコードに示すように Abort メソッドを使用します
スレッドの開始と停止の他、次のコードに示すように Sleep メソッドや Suspend メソッドを呼び出してスレッドを一時停止したり、中断しているスレッドを Resume メソッドで再開したり、Abort メソッドを使用してスレッドを破棄したりできます。
TestThread.Sleep(1000)
TestThread.Abort()
スレッドのメソッド
個別のスレッドを制御するために使用できるメソッドの一部を次の表に示します。
メソッド | 動作 |
|---|
Start | スレッドの実行を開始します。 |
Sleep | スレッドを一定の時間中断します。 |
Suspend | セーフ ポイントに達したスレッドを一時中断します。 |
Abort | セーフ ポイントに達したスレッドを中断します。 |
Resume | 中断しているスレッドを再開します。 |
Join | 別のスレッドが終了するまで現在のスレッドを待機させます。タイムアウト値を指定してこのメソッドを使用すると、指定の時間内でスレッドが終了した場合、True が返されます。 |
セーフ ポイント
これらのメソッドの大部分は自明ですが、セーフ ポイントは新しい概念です。セーフ ポイントとは、共通言語ランタイムが自動ガベージ コレクション、つまり不要な変数を解放し、メモリを再要求するプロセスを安全に実行できるコード内の場所です。スレッドの Abort メソッドまたは Suspend メソッドを呼び出すと、共通言語ランタイムがコードを分析し、スレッドの実行を停止してもよい場所を探します。
スレッドのプロパティ
スレッドには、次の表に示すように、複数の便利なプロパティが用意されています。
プロパティ | 値 |
|---|
IsAlive | スレッドがアクティブな場合、値は True です。 |
IsBackground | スレッドがバックグランウンド スレッドであるかどうかを示す、ブール型を取得または設定します。バックグラウンド スレッドは、フォアグラウンド スレッドと似ていますが、プロセスの終了を防止しません。プロセスに属するフォアグラウンド スレッドがすべて終了すると、共通言語ランタイムは、まだ動作しているバックグラウンド スレッドの Abort メソッドを呼び出してプロセスを終了します。 |
Name | スレッドの名前を取得または設定します。デバッグ時の個別のスレッドの検出に、最もよく使用されます。 |
Priority | オペレーティング システムがスレッドのスケジュールに優先順位を示す値を取得または設定します。 |
ApartmentState | 特定のスレッドに使用するスレッド モデルを取得または設定します。スレッド モデルは、スレッドがアンマネージ コードを呼び出すときに重要です。 |
ThreadState | スレッドの状態を記述する値です。 |
スレッドの状態とメソッドの詳細については、「スレッド状態」を参照してください。