我的问题是:
通过循环来调用backgroundWorker1这个控件后台执行操作,这样在上次执行 backgroundWorker1没有完成,下一次循环会提示错误,但是又不能直接跳过要执行的循环。我想用在每次调用 backgroundWorker1 控件时都判断下他是否完成,如果完成,就调用,如果没有完成就把循环停下来,等
上次的执行结束才调用此次循环,我用如下方式如何实现(10次循环不能少)?for (int i = 0; i < 10; i++)
                    {
                         if (backgroundWorker1.IsBusy)
                        {
                            这里如何写才能让此循环暂停下来,等待上次循环处理完后再调用下一次那?
                        }
                        else
                        { 
                            backgroundWorker1.RunWorkerAsync();
                        }
                    }

解决方案 »

  1.   

    LZ不要用if判断,改用while(backgroundWorker1.IsBusy) 
      

  2.   

    回二楼,我要循环一个数组中项数,即把数组中的每个值都循环一些,并且把数组中的值传给backgroundWorker1做参数的。
      

  3.   

    al为一个arroylist,我吧程序代码改为这样:
                        int io = al.Count;
                        int oi = 0;
                        while (oi<io)
                        {
                            if (oi >= io) { break; }
                            info info = (info)al[oi];
                            if (!backgroundWorker1.IsBusy)
                            {
                                oi++;
                                backgroundWorker1.RunWorkerAsync(info);
                            }
                            else
                            { System.Threading.Thread.Sleep(1000 * 3); }
                        }
    这样会产生“程序没有反应”的问题。
      

  4.   

                       int io = al.Count; 
                        int oi = 0; 
                        while (oi <io) 
                        { 
                            if (oi >= io) { break; } 
                            info info = (info)al[oi]; 
                            if (!backgroundWorker1.IsBusy) 
                            { 
                                oi++; 
                                backgroundWorker1.RunWorkerAsync(info); 
                            } 
                            else 
                            { 
                             
                             //你在这里Sleep(1000 * 3),界面在3秒内就会没反应的
                                //改为100ms 句感觉不出来了,也可以降低CPU的使用率
                            System.Threading.Thread.Sleep(100); 
                             }
                            
                           //加上这句,界面就有反应了
                           Application.DoEvents(); 
                        }