问题描述
- 程序运行和调试的问题
-
List userList = new List
{
new UserModel{ UserName="jiejiep", UserAge = 26},
new UserModel{ UserName="xiaoyi", UserAge = 25},
new UserModel{ UserName="zhangzetian", UserAge=24}
};
public class TempClass
{
public UserModel um
{
get;
set;
}public void ShowMessage(object obj) { Thread.Sleep(1000); MessageBox.Show(um.UserName); } }
复制代码
复制代码
TempClass tempCls = new TempClass();
foreach (var u in userList)
{
tempCls.um = u;ThreadPool.QueueUserWorkItem((obj) => { tempCls.ShowMessage(obj); }); }
调试结果和运行结果不同,能不能给我解释一下
都是高手,但是解释的不一样,我该相信谁的?
cazhy和bdmh你俩说的是一个意思吗?
解决方案
多线程程序如果不同步,运行结果无法预料。因为线程谁执行快,谁执行慢,谁先谁后都是随机的。
解决方案二:
先表达清楚,什么结果不同,不同在哪
解决方案三:
设置断点,结果jiejiep,xiaoyi,zhangzetian
直接运行:三个zhangzetian
解决方案四:
http://www.cnblogs.com/artech/archive/2009/05/22/1486761.html
解决方案五:
确实不太明白你的问题是什么。我看到了线程池,是不是接过和预期不一致了。能说下结果到底啥样?
解决方案六:
你调试时,给了系统时间,让线程运行完,当运行时,因为线程是异步的,所以当你for循环都结束了,线程可能才开始运行,这时传递的obj都是最后一个
解决方案七:
编译器调试时,在可疑代码段设置断点,然后一步步跟踪,调试,
时间: 2024-09-16 16:07:11