问题描述
各位大侠,帮忙看一下,这样循环产生的线程,结果用foreach遍历时,只有两条线程,而我有10次循环,这是为什么?那里错了吗?网上找了好久都是这样动态产生的线程,但其实只产生一条线程.ThreadnewThread=null;for(inti=0;i<intMethodCount;i++)//根据行数,产生相应线程{strName=dgv_server.Rows[i].Cells["ColumnName"].Value.ToString().Trim();intID=Convert.ToInt32(dgv_server.Rows[i].Cells["ID"].Value.ToString().Trim());strThreadName=strName+intID.ToString().Trim();Execthreadsnewthread=newExecthreads(intID,strName);newThread=newThread(newthread.ExecNewThread){Name=strThreadName,IsBackground=true};newThread.Start();}
foreach(ProcessThreadthinProcess.GetCurrentProcess().Threads){if(th.ThreadState==System.Diagnostics.ThreadState.Running){n++;}}
解决方案
解决方案二:
你的线程里都干啥呢了,如果线程结束很快,你foreach时,早就没有了
解决方案三:
Process.GetCurrentProcess().Threads不准的你用进程管理器看,线程数可能能上到好几十,可是实际上有的线程早结束了
解决方案四:
但是原来提示是1,后面开始循环产生线程后,一直都为2,就算所有都搪行完毕也为二,另外,我该如何知道我的线程已经存了,启动后怎么判断各条线程的状态,我现在可否赐教一下
解决方案五:
Execthreadsnewthread你new完别丢弃放进List<Execthreads>里,不就可以随时看状态了你把变量丢弃了,还上哪找去
解决方案六:
System.Diagnostics.ProcessThread代表非托管线程System.Threading.Thread代表托管线程两者之间没有直接联系的。根据MSDN提供的信息,一个非托管线程可以包含多个托管线程。