循环内加入线程的问题
C# code
foreach (DataRow dr in dt.Rows)
{
try
{
t = new Thread(doThis);
object val = dr["Domain"].ToString();
t.IsBackground = true;
t.Start(val);
}
catch
{
rank.Doing = false;
MessageBox.Show("发生错误,请联系管理员");
}
}
如上代码所示,循环内加入线程执行doThis方法。因为doThis方法所做操作耗时较长且不一定,dothis还未执行完成程序就开始下一次循环了,导致程序混乱。
如何才能做到保证doThis方法执行完成后再开始下一次循环?
------解决方案--------------------做个标识呗,每次循环先判断标志,做好锁就可以了。
------解决方案--------------------晕倒,多线程的目的本来就是并发,让多个任务同时进行,如果你要执行完一次doThis后再执行下一次,那么何必用线程?直接调用dothis就完了,
这样:
foreach (DataRow dr in dt.Rows)
{
object val = dr["Domain"].ToString();
doThis(val);
}
绝对是执行完dothis后再进行下一次循环,
------解决方案--------------------如果你非要用多线程来实行非并发操作,可以用Thread.Join方法,Thread.Join会一直等待,直到线程结束才返回,
foreach (DataRow dr in dt.Rows)
{
try
{
t = new Thread(doThis);
object val = dr["Domain"].ToString();
t.IsBackground = true;
t.Start(val);
t.Join();
}
catch
{
rank.Doing = false;
MessageBox.Show("发生错误,请联系管理员");
}
}
不过这样的程序确实很难看,
------解决方案--------------------
你想用线程做什么?不是异步处理?如果同步不需要把处理放到线程中去