首页 新闻 会员 周边

多线程问题

0
悬赏园豆:20 [已解决问题] 解决于 2010-01-18 13:33

代码如下

public int SendEmail()
{
string[] Address = new string[] { "1", "1", "1", "2" };
EmailModel model
= new EmailModel();//一个实体类
for (int i = 0; i < Address.Count; i++)
{
Email eml
= new Email(Address[i]);
Thread thread
= new Thread(new ParameterizedThreadStart(eml.CountAdd));
thread.Start(model);
}
//这里执行方法等待所有线程执行完毕
return model.SuccessCount;
}


public void CoundAdd(object obj)
{
EmailModel model
= obj as EmailModel;
lock (this)
{
if (successCount == "1")//successCount是通过构造函数传进来的参数
{
model.SuccessCount
+= 1;
}
}
}

model.SuccessCount最后的值为1,为什么会这样?应该为3吧

Ou lei的主页 Ou lei | 小虾三级 | 园豆:619
提问于:2010-01-15 10:09
< >
分享
最佳答案
0
EmailModel model = new EmailModel();//一个实体类 
这个有问题
将model定义为全局的静态变量

private static
EmailModel model = new EmailModel();

收获园豆:10
persialee | 老鸟四级 |园豆:3217 | 2010-01-15 15:59
EmailModel model = new EmailModel();这样多个线程一样操作的是同一个对象吧?
Ou lei | 园豆:619 (小虾三级) | 2010-01-15 16:56
其他回答(2)
0

Lock()

HaiNan_EricHu | 园豆:205 (菜鸟二级) | 2010-01-15 16:25
什么意思?
支持(0) 反对(0) Ou lei | 园豆:619 (小虾三级) | 2010-01-15 16:56
0

程序不完整无法判断,猜测原因可能有二种

1.变量successCount程序运行中发生了变化

2.没有等待线程执行完毕

收获园豆:10
明月我心 | 园豆:250 (菜鸟二级) | 2010-01-17 01:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册