当主线程用
while (T < 1000)
{
System.Threading.Thread.Sleep(5);
if (DataComplete == true)//等待是否完成
{
break;
}
T ++;
if (T > 1000)
{
return;
}
}
后,次线程就不工作了。等个WHILE完成后他才开始工作
while (T < 1000)
{
System.Threading.Thread.Sleep(5);
if (DataComplete == true)//等待是否完成
{
break;
}
T ++;
if (T > 1000)
{
return;
}
}
后,次线程就不工作了。等个WHILE完成后他才开始工作
用这样发方法创建的
if (DataComplete == true)//等待是否完成
{
break;
}
我的次线程就在填数据,,,填写完成后我这里才能DataComplete == true跳出循环,(编译成EXE是行的),Debug调试的时候就卡在那里了。。这个是正常的么?
{
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);
}这个是次线程的代码
{
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;
}
}这个主线程的代码
{
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();开启线程代码