C# 如何从线程的名称/id获取线程实例?

C# 如何从线程的名称/id获取线程实例?,c#,multithreading,C#,Multithreading,是否可以获取特定运行线程的实例,使其知道其名称或id?如果是,如何执行?不确定是否有更直接的方法,但在最坏的情况下,您应该能够循环执行进程.threads中的所有线程,并检查其中的进程线程.Id 这是有关属性的MSDN文档。不确定是否有更直接的方法,但在最坏的情况下,您应该能够在Process.threads中循环所有线程,并检查它们的ProcessThread.Id 这是有关属性的MSDN文档。您可以尝试以下方法: Thread thread = Process.GetCurrentProce

是否可以获取特定运行线程的实例,使其知道其名称或id?如果是,如何执行?

不确定是否有更直接的方法,但在最坏的情况下,您应该能够循环执行
进程.threads
中的所有线程,并检查其中的
进程线程.Id


这是有关属性的MSDN文档。

不确定是否有更直接的方法,但在最坏的情况下,您应该能够在
Process.threads
中循环所有线程,并检查它们的
ProcessThread.Id


这是有关属性的MSDN文档。

您可以尝试以下方法:

Thread thread = Process.GetCurrentProcess().Threads.Single(t => t.ManagedThreadId == threadId);

您可以尝试以下方法:

Thread thread = Process.GetCurrentProcess().Threads.Single(t => t.ManagedThreadId == threadId);

你忘了使用Cast

Process.GetCurrentProcess().Threads.Cast<ProcessThread>().Single(t => t.ManagedThreadId == threadId);
Process.GetCurrentProcess().Threads.Cast().Single(t=>t.ManagedThreadId==threadId);

您忘记使用Cast

Process.GetCurrentProcess().Threads.Cast<ProcessThread>().Single(t => t.ManagedThreadId == threadId);
Process.GetCurrentProcess().Threads.Cast().Single(t=>t.ManagedThreadId==threadId);


Hmm。似乎我只能根据ID进行比较,而不能根据线程的名称(Thread.Name)。@Amokrane:是的,我觉得这是设计出来的。我从未设置过线程的名称,环顾四周,似乎该功能主要用于调试目的。我没有看到任何人直接这样说,但你可以在这里得到指示:这里,嗯。似乎我只能根据ID进行比较,而不是根据线程的名称(Thread.Name)。@Amokrane:是的,我感觉这是故意的。我从未设置过线程的名称,环顾四周,似乎该功能主要用于调试目的。我没有看到任何人直接这样说,但是你可以在这里得到指示:这里-1因为
ProcessThread
,这就是
Process.Threads
的集合,没有
ManagedThreadId
属性。-1因为
Process.Threads
不是
IEnumerable
,因此
(…)
不起作用。@t当
InnerList
属性包含
ProcessThread
对象的
ArrayList
时,枚举
线程将实际返回
线程
对象,但没有
单个()
函数..大家好。很抱歉,你是对的。我没有注意到Thread是一个只读集合,并且只有IEnumerable.-1因为
ProcessThread
,这就是
进程。Threads
是的集合,没有
ManagedThreadId
属性。-1因为
进程。Threads
不是
IEnumerable
因此
。Single(…)
不起作用。@当
InnerList
属性包含
ProcessThread
对象的
ArrayList
时,枚举
线程将实际返回
Thread
对象,但没有
Single()
函数..大家好。很抱歉,您是对的。我没有注意到Thread是一个只读集合,并且只有IEnumerable。否。这会产生一个异常。强制转换无效。强制转换类型错误。请改用
.cast()
,这应该是work@yoelhalb否,这也会导致无效的强制转换异常。表示ProcessThread不是从System.Threading.ThreadNo派生的。这会导致异常。强制转换无效。强制转换类型错误,请改用
.cast()
,这应该是work@yoelhalb不,这也会导致无效的强制转换异常。表示ProcessThread不是从System.Threading.Thread派生的