2011-09-20 18 views
6

私はC#4.0(winforms)で作業しています.10以上のスレッドでアプリケーションをデバッグしています。デバッグ中に、どのスレッドをデバッグすべきかを選択するためのドロップダウンがあります(ブレークポイントの間のみアクセス可能)。Visual Studioデバッガでスレッドに名前を付けることはできますか?

これらは「Win32のスレッド」、「ワーカースレッド」、「RPCコールバックスレッド」などと表示さ...

私は自分のコード内からそれらに名前を付けるのが大好きです。私はすべてのスレッドをバックグラウンドワーカーで実行しています。

編集:私の解決策。これは100%の時間では機能しないかもしれませんが、正確に必要なことをします。場合によってはラベルが間違っている場合は、私が作業しているコンテキストでOKです。すべてのBackgroundWorkerのの*の_doworkイベントで

、私は次のコード行を置く:どちらが

ReportData.TrySetCurrentThreadName(String.Format("{0}.{1}", MethodBase.GetCurrentMethod().DeclaringType, MethodBase.GetCurrentMethod().Name)); 

...

public static void TrySetCurrentThreadName(String threadName) 
    { 
    if (System.Threading.Thread.CurrentThread.Name == null) 
    { 
     System.Threading.Thread.CurrentThread.Name = threadName; 
    } 
    } 

答えて

8

さてあなたはThread.Nameプロパティを使用することができますが、あなたができますそれに一度だけ書き込みます。だからを作成するときは、適切な名前を付けてください。

+0

API Windowsの['CreateThread'](http://msdn.microsoft.com/en-us/library/ms682453.aspx)では名前を使用できません。 .NETの名前は単にプレースホルダーであると仮定します。もしそうであれば、私はスレッドの名前を変更するためのユースケースを考えることはできませんが、読み書きが可能でした。 – Abel

+0

私はすべてのマルチスレッドを実行するためにBackgroundWorkersを使用しているので、それは安全なアクションですか?私はそれが必要に応じてスレッドを再利用するかもしれないと仮定します。 – greggorob64

+0

@Abel:.NETスレッドは必ずしもWinAPIスレッドの周りに薄いラッパーであるとは限りません。 – Vlad

1
Thread.CurrentThread.Name = "Give your name here"; 
+2

名前が既に設定されているときに 'System.InvalidOperationException'をスローします。 – Abel

+0

あなたはそうです、名前は一度しか設定できません。 – Maxim

関連する問題