2012-04-30 8 views
1

Thread.CurrentThread.Nameを呼び出すことによってスレッド名を取得できることがわかります内部オブジェクトメソッドからスレッド名を取得する

しかし、私はトリッキーなシナリオを持っています。

私は2つのスレッドを作成し、それぞれ新しいオブジェクト(objAと言う)を起動し、メソッドを実行します。オブジェクト(objA)メソッド(objAM)内に別のオブジェクト(objBと言う)を作成し、メソッド(objBM)を実行します。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 


namespace ConsoleApplication1 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      TESTA a = new TESTA(); 
     } 

    } 

    class TESTA 
    { 
     private Thread t; 

     public TESTA() 
     { 
      t = new Thread(StartThread); 
      t.Name = "ABC"; 
      t.IsBackground = true; 
      t.Start(); 

      t = new Thread(StartThread); 
      t.Name = "XYZ"; 
      t.IsBackground = true; 
      t.Start(); 

     } 

     private void StartThread() 
     { 
      objA thisA = new objA(); 
     } 
    } 

    class objA 
    { 
     private System.Threading.Timer t1; 

     public objA() 
     { 
      objAM(); 
      t1 = new Timer(new TimerCallback(testthread), null, 0, 1000); 
     } 

     private void objAM() 
     { 
      Console.WriteLine("ObjA:" + Thread.CurrentThread.Name); 
     } 

     private void testthread(object obj) 
     { 
      objB thisB = new objB(); 
     } 
    } 

    class objB 
    { 
     public objB() 
     { 
      objBM(); 
     } 

     private void objBM() 
     { 
      Console.WriteLine("ObjB:" + Thread.CurrentThread.Name); 
     } 
    } 
} 

ただし、objBのThread.CurrentThread.Nameの値は空のまま戻ります。

どのようにしてobjBM内でスレッド名を取得できますか?

+0

入力したコードサンプルはコンパイルされません。ヘルプが必要な場合は、エラーをコンパイルして示す短い完全なプログラムを提供することを検討することもできます。 –

+0

が更新されました。私はtimer.timerの代わりにthreading.timerに関連していると考えています。 – AlphaAu

答えて

2

説明より:System.Threading.Timer:このメソッドは、タイマーを作成したスレッドでは実行されません。システムによって提供されるThreadPoolスレッド上で実行されます。

したがって、あなたのtestthreadメソッドは、無名ThreadPoolスレッドで実行されました。あなたはThread.CurrentThread.IsThreadPoolThreadと呼んで確認することができます。

+0

ありがとう。私はスレッドのプロパティを見落とします。 – AlphaAu

+0

@AlphaAuなぜあなたはこの回答を受け入れていませんか? –

+0

このスレッドに戻ったときに間違ってページをクリックしたようです.... – AlphaAu

関連する問題