假设主线程正在生成一个新线程t1,我在t1上运行的代码如何找到主线程的线程ID(使用c#)?
编辑:
我不控制新线程的创建。所以我不能将任何参数传递给线程。
感谢。
答案 0 :(得分:10)
你不能。
但你可能会考虑:
答案 1 :(得分:2)
如果你只有两个线程而第二个线程是后台线程,你可以枚举进程中的所有线程,并通过阅读Thread.IsBackground
property来消除后台线程。不是很漂亮,但也许你需要什么?
您可以阅读有关foreground and background threads on MSDN的更多信息。
答案 2 :(得分:0)
我不知道你是否有一个属性可以做到这一点,但你可以在你的线程中添加一个新的参数传递给它。这将是我能想到的最简单的方式......
答案 3 :(得分:0)
如果您使用的是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
但是,如果根本无法将数据传递到子线程,请考虑重命名父线程或所有子线程。