线程创建线程中的循环问题。

踏平扶桑 2010-11-09 11:52:39
主程序创建一个线程

ThreadPool.QueueUserWorkItem(new WaitCallback(线程A), null);

线程A里面又创建了另外一个线程,这个线程里面有循环。

ThreadPool.QueueUserWorkItem(new WaitCallback(线程B), 参数);


线程B里面有循环

……
foreach (Match match in matches)
{
代码,输出一些东西;
}
……

现在的问题是,如果我在线程B的循环处加断点,F10一步一步是能执行全部的循环操作的,如果我不加断点,直接运行的话,这个循环感觉是不执行的(不输出),而是直接执行循环后面的代码了。

这个问题麻烦大家帮忙看一下。谢谢!!
...全文
149 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bloodish 2010-11-09
  • 打赏
  • 举报
回复
matches这个对象什么时候生成的?
在B里面,循环之前,输出一下matches.Count.

你不设断点的时候很可能matches根本没准备好,这样的话,你的循环不会有任何输出.
lcmlhs_2005 2010-11-09
  • 打赏
  • 举报
回复
楼上说的不错,线程嵌套的时候没有睡眠执行不出来吧,CPU执行的很快的
兔子-顾问 2010-11-09
  • 打赏
  • 举报
回复
看上去像是时序问题。必要的地方加上
Thread.Sleep(0);
试试。加在哪你自己看代码找合适地方。避免循环占用太多cpu不释放。
踏平扶桑 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wuyazhe 的回复:]
放在foreach内部呢?
[/Quote]
放到内部。sleep大于0 搞定。多谢多谢!
兔子-顾问 2010-11-09
  • 打赏
  • 举报
回复
放在foreach内部呢?
踏平扶桑 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bloodish 的回复:]
matches这个对象什么时候生成的?
在B里面,循环之前,输出一下matches.Count.

你不设断点的时候很可能matches根本没准备好,这样的话,你的循环不会有任何输出.
[/Quote]

MatchCollection matches = rr.Matches(m.Value);
foreach (Match match in matches)
{
代码,输出一些东西;
}
我尝试把Thread.Sleep(0);加在foreach 上面,也不行,偶尔能输出一个或者两个结果(断点看到的结果有50个)
SadEmprie 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bloodish 的回复:]

matches这个对象什么时候生成的?
在B里面,循环之前,输出一下matches.Count.

你不设断点的时候很可能matches根本没准备好,这样的话,你的循环不会有任何输出.
[/Quote]

同意,很可能matches还为空呢,就执行到foreach了~~

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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