程序运行和调试的问题

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你俩说的是一个意思吗?

7个回答

多线程程序如果不同步,运行结果无法预料。因为线程谁执行快,谁执行慢,谁先谁后都是随机的。

先表达清楚,什么结果不同,不同在哪

设置断点,结果jiejiep,xiaoyi,zhangzetian
直接运行:三个zhangzetian

确实不太明白你的问题是什么。我看到了线程池,是不是接过和预期不一致了。能说下结果到底啥样?

u010941149
sdfgrtyu 设置断点,结果jiejiep,xiaoyi,zhangzetian 直接运行:三个zhangzetian
接近 6 年之前 回复

你调试时,给了系统时间,让线程运行完,当运行时,因为线程是异步的,所以当你for循环都结束了,线程可能才开始运行,这时传递的obj都是最后一个

u010941149
sdfgrtyu 能不能给我解释一下:线程异步?
接近 6 年之前 回复

编译器调试时,在可疑代码段设置断点,然后一步步跟踪,调试,

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐