C# 动态创建线程的问题

ko888888 2015-06-05 04:09:45
各位大侠,帮忙看一下, 这样循环产生的线程, 结果用 foreach遍历时,只有两条线程, 而我有10次循环, 这是为什么? 那里错了吗?
网上找了好久都是这样动态产生的线程, 但其实只产生一条线程.

Thread newThread = null;
for (int i = 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();
Execthreads newthread = new Execthreads(intID, strName);
newThread = new Thread(newthread.ExecNewThread) { Name = strThreadName, IsBackground = true };
newThread.Start();
}



foreach (ProcessThread th in Process.GetCurrentProcess().Threads)
{
if (th.ThreadState == System.Diagnostics.ThreadState.Running)
{ n++; }
}
...全文
2738 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1
引用 3 楼 ko888888 的回复:
我该如何知道我的线程已经存了, 启动后怎么判断各条线程的状态, 我现在可否赐教一下


贴出你的 ExecNewThread 方法代码来!

所谓的”状态“就是你的 ExecNewThread 方法执行过程/进度,你自己设计,还要求别人?
weixin_37764828 2018-06-28
  • 打赏
  • 举报
回复
你要保存住他们, 创建完start就要了? 线程结束了资源释放了,你就永远看不到他们了吧。保存到一个list里面去。
qq_26703139 2018-05-22
  • 打赏
  • 举报
回复
红孩儿这哥们说得对(名字不会打)
孤独的海啊 2017-12-20
  • 打赏
  • 举报
回复
你这样不对哦。 你要保存住他们, 创建完start就要了? 线程结束了资源释放了,你就永远看不到他们了吧。保存到一个list里面去。
遥望那些年 2015-06-05
  • 打赏
  • 举报
回复
System.Diagnostics.ProcessThread 代表非托管线程 System.Threading.Thread 代表托管线程 两者之间没有直接联系的。根据MSDN提供的信息,一个非托管线程可以包含多个托管线程。
於黾 2015-06-05
  • 打赏
  • 举报
回复
Execthreads newthread 你new完别丢弃 放进List<Execthreads>里,不就可以随时看状态了 你把变量丢弃了,还上哪找去
ko888888 2015-06-05
  • 打赏
  • 举报
回复
但是原来提示是1, 后面开始循环产生线程后,一直都为2,就算所有都搪行完毕也为二, 另外, 我该如何知道我的线程已经存了, 启动后怎么判断各条线程的状态, 我现在可否赐教一下
於黾 2015-06-05
  • 打赏
  • 举报
回复
Process.GetCurrentProcess().Threads 不准的 你用进程管理器看,线程数可能能上到好几十,可是实际上有的线程早结束了
bdmh 2015-06-05
  • 打赏
  • 举报
回复
你的线程里都干啥呢了,如果线程结束很快,你foreach时,早就没有了

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧