2016-11-08 17 views
2

新しいスタックオーバーフローです。ここで多くのものを見上げたが、今日はサインアップした。ちょうどマルチスレッドコースを開始しました。フォアグラウンドとバックグラウンドスレッド

フォアグラウンドとバックグラウンドスレッドをいつ使用するのか理解できません。私はスレッドを少し新しくしています。そのメリットとデメリットは何ですか?私がプロパティを設定するとき、私は何について考えるべきですか?

私には、アプリケーションを閉じる際にスレッドを処理する必要がないという意味で、バックグラウンドを使用するのが非常に便利だと思われます。私の先生は、フォアグラウンドスレッドのほとんどが使用されていると言いましたが、私が少なくとも理解する方法で理由を説明しませんでした。

フォアグラウンドスレッドを使用するタイミングとバックグラウンドスレッドを使用するタイミングの良い例はありますか?

C#標準ライブラリは、スレッドクラスコンストラクタによって作成されたスレッドをデフォルトでフォアグラウンドに設定しています。一方、ThreadPoolはデフォルトのバックグラウンドです。これの理由は何ですか?なぜ彼らはこの方法で図書館に書いたのですか? (私はプロパティが変更することができます知っている、私はちょうど彼らがなぜこのようにデフォルトであるか知りたい)。

+0

※非常に少々あります。これは、CLRがプログラムのメインスレッドが終了したときに実行する必要があることを把握するのに役立ちます。それは他の実行中のスレッドを見て、そのうちの1つがBackground = falseであれば、プログラムを実行し続けます。残さない限り。それで全部です。他のスレッドが気にする重要なことを何もしないので、スレッドが突然中断されても気にしないときは、Background = trueを使用します。つまり、dbaseクエリを実行してUIを更新するワーカースレッドです。もうUIスレッド=>あなたは気にしません。 –

+0

私は確かに私が確信していたと思った。ありがとう。 – Sandrasa

答えて

0

私は、.NET専門家ではないが、ここでbackgroundプロパティについてofficial documentationがある:そのバックグラウンドスレッドが終了からプロセスを妨げない以外

バックグラウンドスレッドは、フォアグラウンドスレッドと同じです。プロセスに属するすべてのフォアグラウンドスレッドが終了すると、共通言語ランタイムはプロセスを終了します。残りのバックグラウンドスレッドは停止され、完了しません。スレッドプールのケースでは

、我々は唯一のサブシステム「活動」を管理し、他の「メイン」(フォアグラウンド)のスレッドは、より高いレベル(すなわちシステム)、「活動」を管理するために生きているというスレッドプールをとることができます。システムレベルのスレッドが存続すると、プロセスが停止するのを防ぎます。スレッドプールされたタスクは、一般的にプロセスライフを強制するのに十分ではありません。

関連する問題