当我创建它们时,我需要为某些线程分配连续的ID,并且无论起始ID是什么(如11,12,13,...或9,10,11)
这就是我所做的,在这里我创建4个线程并调用My_function()
for ( byte i = 0 ; i < 4 ; i++ )
{
myThreadArray[i] = new Thread(new ParameterizedThreadStart(My_function));
myThreadArray[i].Start(i);
}
它似乎有效但我可以保证我总是为它们分配连续的ID
答案 0 :(得分:5)
由于您使用数组来包含线程,因此该数组的每个顺序分配的元素都将具有顺序索引。
但是,如果需要将线程ID映射到MyThreadArray
中的元素,因为在创建线程时无法控制线程ID
(只有线程Name
),您可以使用Dictionary<int, int>
将实际线程ID
映射到MyThreadArray
索引
for ( byte i = 0 ; i < 4 ; i++ )
{
myThreadArray[i] = new Thread(new ParameterizedThreadStart(My_function));
myThreadArray[i].Start(i);
MyThreadDictionary.Add(MyThreadArray[i].ManagedThreadId(), i)
}
并通过以下方式访问它:
logSet[MyThreadDictionary(System.Threading.Thread.CurrentThread.ManagedThreadId)]
或使用Array.FindIndex
以相同的方式检索包含与您要匹配的线程ID匹配的线程的MyThreadArray
元素的索引。
答案 1 :(得分:2)
您应该使用Name
属性,以便跟踪...
http://msdn.microsoft.com/en-us/library/system.threading.thread.name.aspx
for ( byte i = 0 ; i < 4 ; i++ )
{
myThreadArray[i] = new Thread(new ParameterizedThreadStart(My_function));
myThreadArray[i].Start(i);
myThreadArray[i].Name = i.ToString();
}
您可以像这样访问当前线程:
logSet[Convert.ToInt32(System.Threading.Thread.CurrentThread.Name) % numOfThreds]