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

C#におけるThread.CurrentThreadプロパティの使い方を解説

C#のThread.CurrentThreadプロパティは、現在実行中のスレッドを取得するために使用されます。マルチスレッドプログラミングにおいて、どのスレッドが処理を実行しているのかを確認したり、スレッドに名前を付けたりする際に非常に便利なプロパティです。

構文

Thread.CurrentThreadプロパティの構文は以下の通りです。

public static System.Threading.Thread CurrentThread { get; }

このプロパティは読み取り専用(get のみ)で、静的(static)メンバーとして定義されているため、Threadクラスのインスタンスを作成しなくても直接呼び出すことができます。

サンプルコード1

まず、基本的な使用例を見てみましょう。

using System;
using System.Threading;
public class Demo {
   public static void Main() {
      Thread thread = new Thread(new ThreadStart(demo1));
      ThreadPool.QueueUserWorkItem(new WaitCallback(demo2));
      thread = Thread.CurrentThread;
      thread.Name ="Demo Thread";
      Console.WriteLine("Current running Thread = "+thread.Name);
      Console.WriteLine("Current state of Thread = "+thread.ThreadState);
      Console.WriteLine("ManagedThreadId = "+thread.ManagedThreadId);
   }
   public static void demo1() {
      Thread.Sleep(2000);
   }
   public static void demo2(object stateInfo) {
      Console.WriteLine("Thread belongs to managed thread pool? = "+Thread.CurrentThread.IsThreadPoolThread);
   }
}

出力結果

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

Current running Thread = Demo Thread
Current state of Thread = Running
ManagedThreadId = 20
Thread belongs to managed thread pool? = True

この例では、Thread.CurrentThreadプロパティで現在のスレッドを取得し、Nameプロパティで「Demo Thread」という名前を設定しています。また、ThreadStateプロパティでスレッドの状態(Running)を、ManagedThreadIdプロパティでスレッドの一意なIDを取得しています。さらに、IsThreadPoolThreadプロパティを使うことで、そのスレッドがマネージドスレッドプールに属しているかどうかを判定できることも分かります。

サンプルコード2

続いて、別の例を見てみましょう。こちらではConsole.WriteLineの書式指定子を使用してスレッドIDを出力しています。

using System;
using System.Threading;
public class Demo {
   public static void Main() {
      Thread thread = new Thread(new ThreadStart(demo1));
      ThreadPool.QueueUserWorkItem(new WaitCallback(demo2));
      thread = Thread.CurrentThread;
      thread.Name ="Demo Thread";
      Console.WriteLine("Current running Thread = "+thread.Name);
      Console.WriteLine("Current state of Thread = "+thread.ThreadState);
      Console.WriteLine("ManagedThreadId = "+thread.ManagedThreadId);
      Console.WriteLine("Thread Id: {0}", Thread.CurrentThread.ManagedThreadId);
   }
   public static void demo1() {
      Thread.Sleep(2000);
   }
   public static void demo2(object stateInfo) {
      Console.WriteLine("Thread belongs to managed thread pool? = "+Thread.CurrentThread.IsThreadPoolThread);
   }
}

出力結果

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

Current running Thread = Demo Thread
Current state of Thread = Running
ManagedThreadId = 29
Thread Id: 29
Thread belongs to managed thread pool? = True

まとめ

Thread.CurrentThreadプロパティを使用すると、コード内のどこからでも現在実行中のスレッド情報にアクセスできます。スレッド名の設定や状態の確認、スレッドIDの取得など、デバッグやログ出力の場面で活躍する重要なプロパティです。ManagedThreadIdは実行環境によって値が変わる点にも注意しておきましょう。

  1. 【C#】Console.KeyAvailableプロパティの使い方とサンプルコード

    Console.KeyAvailableプロパティとはC#のConsole.KeyAvailableプロパティは、標準入力ストリームにキー入力が利用可能かどうかを示す値を取得するためのプロパティです。戻り値はbool型で、キー入力があればtrue、なければfalseを返します。このプロパティは読み取り専用(getのみ)であり、Console.ReadKey()メソッドと組み合わせることで、処理をブロックすることなくキー入力の有無を確認しながらループ処理を実装できます。構文public static bool KeyAvailable { get; }使用例1:キー入力を検出して表示する以下は、

  2. C#におけるスレッドの中止(Abort)方法をわかりやすく解説

    Abort()メソッドは、実行中のスレッドを強制的に終了(破棄)するために使用されるメソッドです。 このメソッドが呼び出されると、ランタイムはThreadAbortExceptionという例外をスローすることで対象のスレッドを中止させます。特徴的なのは、この例外が通常のcatchブロックでは捕捉できない点です。制御は最終的にfinallyブロック(存在する場合)へと移行します。 スレッドを中止する際は、以下のように対象のスレッドに対してAbort()メソッドを呼び出します。 childThread.Abort(); 注意:最新の.NET環境での扱い Thread.Abort()は.NET Fr