ここで注意すべき点は、Main() 関数が配置されているスレッドに他のスレッドがアタッチされていることです。Main() 関数は、すべてがフォアグラウンドである場合、開始スレッドをメイン スレッドと呼ぶことができます。スレッドが停止されると、メインスレッドを終了でき、すべてのバックグラウンドスレッドが無条件に終了します。ミクロな観点からはすべてのスレッドが逐次実行されますが、マクロな観点からは並列実行していると考えることができます。
読者は Thread.ThreadState プロパティに気づいたはずです。このプロパティはスレッドの実行状態を表し、状況に応じて異なる値を持ちます。したがって、値を判断することでプログラム フローを設計できる場合があります。さまざまな状況での ThreadState の値は次のとおりです。
Aborted: スレッドが停止しました
AbortRequested: スレッドの Thread.Abort() メソッドが呼び出されましたが、スレッドはまだ停止していません
Background: スレッドはバックグラウンドで実行され、属性 Thread .IsBackground 関連
Running: スレッドは正常に実行されています
Stopped: スレッドが停止されました
StoPRequested: スレッドは停止を要求されています
Suspended: スレッドは一時停止されました (この状態では) 、Resume() メソッドを呼び出すことで再実行できます)
SuspendRequested : スレッドは一時停止を要求していますが、応答する時間がありません
Unstarted : の実行を開始するために Thread.Start() が呼び出されません。
WaitSleepJoin: スレッドは Wait()、Sleep()、Join() などのメソッドを呼び出すため、ブロックされた状態になります。バックグラウンドで実行されているスレッドには何が特別なのでしょうか?実際、バックグラウンド スレッドとフォアグラウンド スレッドの違いは 1 つだけです。それは、バックグラウンド スレッドはプログラムの終了を妨げないということです。プロセスのすべてのフォアグラウンド スレッドが終了すると、CLR (共通言語ランタイム環境) は、残っているバックグラウンド プロセスの Abort() メソッドを呼び出してプロセスを完全に終了します。
スレッドが CPU 時間を競合する場合、CPU はスレッドの優先順位に従ってサービスを提供します。 C# アプリケーションでは、ユーザーは、Highest、AboveNormal、Normal、BelowNormal、Lowest の 5 つの異なる優先順位を設定できます。スレッドの作成時に優先順位を指定しない場合、システムはデフォルトで ThreadPriority.Normal を設定します。スレッド
に優先度を割り当てるには、次のコードを使用できます:
//優先度を最低に設定します
myThread.Priority=ThreadPriority.Lowest;