当主线程用
              while (T < 1000)
                    {
                        System.Threading.Thread.Sleep(5);
                        if (DataComplete == true)//等待是否完成
                        {
                          break;
                        }
                        T ++;
                        if (T  > 1000)
                        {
                             return;
                        }
                    }
                后,次线程就不工作了。等个WHILE完成后他才开始工作

解决方案 »

  1.   

    应该不会的呀,System.Threading.Thread.Sleep()方法是让当前线程睡眠,另外一个线程不受干扰才对,你的子线程是怎么创建的?
      

  2.   

      XcFootManagerThread = new Thread(new ThreadStart(XcFootManager.ThreadFillDate));
    用这样发方法创建的
      

  3.   

    我自己也感觉很奇怪。编译成EXE运行的时候没有问题。不过就是调试的时候发现以上的问题
      

  4.   

    调试的时候,当然会这样了,一行行执行代码,当然要等while循环结束了!
      

  5.   

    应该是我在执行的时候。System.Threading.Thread.Sleep(5);
      if (DataComplete == true)//等待是否完成
      {
      break;
      }
    我的次线程就在填数据,,,填写完成后我这里才能DataComplete == true跳出循环,(编译成EXE是行的),Debug调试的时候就卡在那里了。。这个是正常的么?
      

  6.   

      for (int i = 0; i < DsOriginal.Tables[0].Rows.Count; i += DsRows)
                {
                    lock (ThreadStateObject)
                    {
                        if (ThreadState == 2)
                            break;
                        if (DRowIndex != CurrentRowIndex)
                        {
                            DRowIndex = CurrentRowIndex;
                            WriteLog(CurrentRowIndex.ToString()+"  开始滚动");
                            runNum = Math.Min(DsRows, DsOriginal.Tables[0].Rows.Count - DsRows);
                            
                            FillDataTable(DRowIndex, runNum);
                            WriteLog(runNum.ToString() + "  滚动中");
                            _PageDataComplete = true;
                            WriteLog(CurrentRowIndex.ToString() + "  滚动完成");
                        }
                    }
                    runNum = Math.Min(DsRows, DsOriginal.Tables[0].Rows.Count - i);
                    FillDataTable(i, runNum);
                }这个是次线程的代码
      

  7.   

      lock (ThreadStateObject)//锁住
                        {
                            if (ThreadState == 2)
                                break;
                            CurrentRowIndex = y;
                            _PageDataComplete = false;//是否完成变量
                        }
                        while (tryT < 1000)
                        {
                            System.Threading.Thread.Sleep(5);
                           
                            if (_PageDataComplete == true || ThreadState == 0 )//等待是否完成
                            {
                                WriteLogMian(_PageDataComplete.ToString());
                                break;
                            }
                            tryT++;
                            if (tryT > 1000)
                            {
                                WriteLogMian(tryT.ToString());
                                return;
                            }
                        }这个主线程的代码
      

  8.   

     if (XcFootManagerThread != null)
                    {
                        lock (XcFootManager.ThreadStateObject)
                        {
                            XcFootManager.ThreadState = 2;
                        }
                        int tryT = 20;
                        while (XcFootManagerThread.IsAlive && tryT > 0)
                        {
                            Thread.Sleep(300);
                            tryT--;
                        }
                        if (XcFootManagerThread.IsAlive)
                        {
                            XcFootManagerThread.Abort();
                            Thread.Sleep(1000);
                        }
                    }
                    XcFootManager.TotalDasetRest();
                    XcFootManagerThread = new Thread(new ThreadStart(XcFootManager.ThreadFillDate));
                    XcFootManager.ThreadState = 1;
                    XcFootManagerThread.Start();开启线程代码
      

  9.   

    FillDataTable(DRowIndex, runNum);这个函数就是填充数据的