2010-01-25 18 views
10

我使用ThreadPool在Windows服务中执行一组任务。该服务每隔10秒产生一个新线程。我想记录从数据库中拾取特定任务的线程的名称。是否有可能获得线程的名称?ThreadPool中的线程名称 - C#

+0

你是什么意思的线程的“名称”? – 2010-01-25 00:19:35

+0

@Anon - 我相信线程被分配了名字 – Nick 2010-01-25 00:26:28

回答

7

我不知道ThreadPool线程是否分配了有意义的Name,但您应该始终能够使用CurrentThreadManagedThreadId进行调试/记录。

+0

谢谢。存储ManagedThreadId是否有任何价值。我如何真实地将它用于调试? – Nick 2010-01-25 00:23:21

+0

嗯,每当两个UserWorkItems在同一个ThreadPool线程上执行时,它就是一个'int'。该值仅在一次程序运行期间有意义。我怀疑在记录ThreadPool线程名称或ID方面是否有任何价值。这是UserWorkItem在哪个线程上执行的实现细节。你不应该在乎这一点。如果UserWorkItem在同一线程上执行,则不应互相影响。 – dtb 2010-01-25 00:26:50

9

造成这种情况的最简单的方法将是每个线程的上下文中,你有可用的CurrentThread属性和归属于一个线程的所有属性:

System.Threading.Thread.CurrentThread.Name 

像以前的海报,虽然提到,在线程池中这将会有多么有意义,我不确定。

1

当使用池中的线程时,不要尝试更改线程状态。这些线程不属于你,它们属于运行时。你不想改变你不拥有的东西。