.NET有没有办法获得父线程ID?

假设主线程正在生成一个新线程t1,我在t1上运行的代码如何找到主线程的线程id(使用c#)?

编辑:
我不控制新线程的创建。 所以我不能将任何参数传递给线程。

谢谢。

你不能。

你可能会考虑:

  1. 使用父线程中的线程ID作为新线程的名称的前缀
  2. 在要生成的方法上创建一个构造函数,该构造函数需要父级的线程ID

如果您只有两个线程而第二个线程是后台线程,则可以枚举进程中的所有线程,并通过读取Thread.IsBackground属性来消除后台线程。 不是很漂亮,但也许你需要什么?

您可以在MSDN上阅读有关前台和后台线程的更多信息。

我不知道你是否有一个属性可以做到这一点,但你可以在你的线程中添加一个新参数传递给它。 这将是我能想到的最简单的方式……

如果您正在使用Threadpool(因此无法控制此处创建的线程),您可以按如下方式工作:

 private static void myfunc(string arg) { Console.WriteLine("Thread " + Thread.CurrentThread.ManagedThreadId + " with parent " + Thread.GetData(Thread.GetNamedDataSlot("ParentThreadId")).ToString() + ", with argument: " + arg ); } public static int Main(string[] args) { var parentThreadId = System.Threading.Thread.CurrentThread.ManagedThreadId; WaitCallback waitCallback = (object pp) => { Thread.SetData(Thread.GetNamedDataSlot("ParentThreadId"), parentThreadId); myfunc(pp.ToString()); }; ThreadPool.QueueUserWorkItem(waitCallback, "my actual thread argument"); Thread.Sleep(1000); return 0; } 

这将产生类似于:

  Thread 3 with parent 1, with argument: my actual thread argument 

但是,如果根本无法将数据传递给子线程,请考虑重命名父线程,或者重命名所有子线程。