【问题标题】:.NET Is there a way to get the parent thread id?.NET 有没有办法获取父线程 ID?
【发布时间】:2010-11-18 11:59:27
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • Win32下一个进程中的所有线程基本上都是平等的,没有“主线程”。 .NET增加了对后台线程的细化,但依然没有“主线程”。
  • @Richard 感谢您的更正。

标签: c# .net multithreading


【解决方案1】:

你不能。

但你可能会考虑:

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

【讨论】:

    【解决方案2】:

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

    你可以阅读更多关于foreground and background threads on MSDN的信息。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        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
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-21
          • 1970-01-01
          • 1970-01-01
          • 2018-10-17
          相关资源
          最近更新 更多