C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でスレッドがバックグラウンドスレッドかどうかを確認する方法

C#では、スレッドがバックグラウンドスレッドであるかどうかを確認するには、IsBackgroundプロパティを使用します。このプロパティは読み書き可能で、値を設定することでスレッドをバックグラウンドスレッドとして動作させることもできます。

なお、新しく作成したスレッドは既定でフォアグラウンドスレッドになります。フォアグラウンドスレッドは処理が完了するまでアプリケーション(プロセス)の終了を防ぎますが、バックグラウンドスレッドはすべてのフォアグラウンドスレッドが終了すると強制的に停止されます。

例1:IsBackgroundプロパティで確認する

まず、IsBackgroundプロパティを使ってスレッドの種類を確認する基本的なコードを見てみましょう。

using System;
using System.Threading;
public class Demo {
   public static void Main() {
      Thread thread = new Thread(new ThreadStart(demo1));
      ThreadPool.QueueUserWorkItem(new WaitCallback(demo2));
      Console.WriteLine("スレッドの現在の状態 = "+thread.ThreadState);
      Console.WriteLine("ManagedThreadId = "+thread.ManagedThreadId);
      Console.WriteLine("このスレッドはバックグラウンドスレッドか? = "+Thread.CurrentThread.IsBackground);
   }
   public static void demo1() {
      Thread.Sleep(2000);
   }
   public static void demo2(object stateInfo) {
      Console.WriteLine("スレッドはマネージドスレッドプールに属しているか? = "+Thread.CurrentThread.IsThreadPoolThread);
   }
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

スレッドの現在の状態 = Unstarted
ManagedThreadId = 721
このスレッドはバックグラウンドスレッドか? = False
スレッドはマネージドスレッドプールに属しているか? = True

ここで「False」と表示されているのは、Mainメソッドを実行しているThread.CurrentThread(メインスレッド)がフォアグラウンドスレッドだからです。また、作成したスレッドはまだ開始されていないため、その状態は「Unstarted」と表示されます。

例2:IsBackgroundプロパティをtrueに設定する

次に、IsBackgroundプロパティにtrueを設定して、スレッドをバックグラウンドスレッドに変更する例を見てみましょう。

using System;
using System.Threading;
public class Demo {
   public static void Main() {
      Thread thread = new Thread(new ThreadStart(demo1));
      ThreadPool.QueueUserWorkItem(new WaitCallback(demo2));
      Console.WriteLine("スレッドの現在の状態 = "+thread.ThreadState);
      Console.WriteLine("ManagedThreadId = "+thread.ManagedThreadId);
      thread.IsBackground = true;
      Console.WriteLine("このスレッドはバックグラウンドスレッドか? = "+thread.IsBackground);
   }
   public static void demo1() {
      Thread.Sleep(2000);
   }
   public static void demo2(object stateInfo) {
      Console.WriteLine("スレッドはマネージドスレッドプールに属しているか? = "+Thread.CurrentThread.IsThreadPoolThread);
   }
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

スレッドの現在の状態 = Unstarted
ManagedThreadId = 1114
このスレッドはバックグラウンドスレッドか? = True
スレッドはマネージドスレッドプールに属しているか? = True

IsBackgroundプロパティにtrueを設定したことで「True」が出力され、このスレッドがバックグラウンドスレッドになったことが確認できます。また、ThreadPoolに登録されたワーカースレッドについては、IsThreadPoolThreadプロパティがTrueを返すことから、マネージドスレッドプールに属していることもわかります。

  1. Windows 10がライセンス認証(アクティブ化)されているか確認する3つの方法

    Microsoftは2015年にWindows 10をリリースし、それ以来、Windows 7やWindows 8といった旧バージョンへ静かに置き換わってきました。しかし、Windows 10の全機能を快適に利用するには、ライセンス認証(アクティベーション)が欠かせません。未認証のままでは、重要な更新プログラムやアプリをダウンロードできず、デスクトップのカスタマイズも制限されます。さらに、「Windowsのライセンス認証を行ってください」というメッセージが繰り返し表示され、デスクトップ右下には透かし(ウォーターマーク)が現れることもあります。 そこで本記事では、お使いのWindows 10

  2. Androidアプリがバックグラウンドで動作しているかどうかを確認する方法を解説

    Androidアプリ開発では、アプリがフォアグラウンド(前面)で動作しているのか、それともバックグラウンド(背後)で動作しているのかを判定したい場面が数多くあります。例えば、通知の表示制御やデータ同期のタイミング調整など、アプリの状態に応じた処理を行う際に役立ちます。この記事では、ActivityManagerのRunningAppProcessInfoクラスを使って、Androidアプリケーションがバックグラウンドで実行されているかどうかを確認する方法を、サンプルコードとともにステップごとに解説します。Step 1:Android Studioで新規プロジェクトを作成するまずはAndroid