循环内加入线程的问题
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("发生错误,请联系管理员");
               }
           }
不过这样的程序确实很难看,
------解决方案--------------------
你想用线程做什么?不是异步处理?如果同步不需要把处理放到线程中去