2009-08-25 5 views
9

バックグラウンドスレッドとフォアグラウンドスレッドの違いは何ですか? MSDNからCLRでは、バックグラウンドスレッドとフォアグラウンドスレッドの違いは何ですか?

+0

説明:C#には、バックグラウンドスレッドとフォアグラウンドスレッドの概念がありません。特定のシナリオがスレッドに関して行う違いは、CLR/COMレベルで行われます。 – JaredPar

+5

C#にはキリンという概念もありませんが、キリンというプロパティでクラスを作ることができます。 IsBackgroundは、フレームワーク内のオブジェクトのプロパティです。 C#_the language_は.NETフレームワークではないことを覚えておいてください。それは単なるプログラミング言語です。 –

答えて

20

バックグラウンドスレッドは、1つの例外を除き フォアグラウンドスレッドと同じです: バックグラウンドスレッドが実行 マネージド実行環境を保持しません。

+0

これは、現在のプロセスが終了するのを防ぐことができないことを意味します。 – Guffa

+0

@Guffa:わかりません。あなたはMSDNのドキュメントの解釈をしのばせていますか? – Amy

+0

コンテクスト切り替え優先度も低くなっていませんか? –

15

this pageを参照してください:

  • フォアグラウンドスレッドが終了するから、現在のアプリケーションを防止するための能力を持っています。すべてのフォアグラウンドスレッドが終了するまで、CLRはアプリケーションをシャットダウンしません(つまり、ホスティングAppDomainをアンロードしません)。 (時々デーモンスレッドと呼ばれる)

  • バックグラウンドスレッドが(それらが現在作業の一部単位にわたって働いている場合でも)、任意の時点で無視することができ、実行の消耗経路としてCLRによって観察されます。したがって、すべてのフォアグラウンドスレッドが終了した場合、アプリケーションドメインがアンロードされると、すべてのバックグラウンドスレッドが自動的に強制終了されます。デフォルトでは

+0

人がバックグラウンドスレッドを使うべきとき.....良い例を挙げてください。 – Mou

4

、スレッドは、彼らがいる限り、それらのいずれかが実行されている として生きアプリケーションを保つ意味、フォアグラウンドスレッドです。 C#はまた、バックグラウンドスレッドをサポートしています。バックグラウンドスレッドは、 アプリケーションを独自の状態に保ちません。すべてのフォアグラウンドスレッドが終了するとただちに終了します。

0

フォアグラウンドまたはバックグラウンドスレッドのいずれかが終了すると、アプリケーションはただちに終了します。アプリケーションの存続期間中、いつでもスレッドをフォアグラウンドからバックグラウンドに変更することができます。 CLRはAppDomainをよりよくサポートするために2種類のスレッドを作成します。フォアグラウンドスレッドが終了すると、CLRは実行中のバックグラウンドスレッドを強制終了します。マネージド実行環境に入るネイティブコードによって作成されたスレッドはすべてバックグラウンドスレッドとしてマークされます。

関連する問題