private static readonly Object ThisLock = new object();
private static readonly AutoResetEvent AutoReset = new AutoResetEvent(false);
private static int _selectindex;
private const int Threadcount = ;
private int _finishcount;
List<T> _datamodellist;
public void LoadPage()
{
Grid();
}
private void Grid()
{
_list.Clear();
_finishcount = ;
_selectindex = ;
_datamodellist = GetAll();
for (var i = ; i < Threadcount; i++)
{
var thread = new Thread(DoTask);
thread.Start();
}
AutoReset.WaitOne();//等待线程池完成
//do something
}
public void DoTask(Object index)
{
while (_selectindex < _datamodellist.Count)
{
lock (ThisLock) //锁定后只有一个线程进入直至块内代码执行完
{
if (_selectindex >= _datamodellist.Count) continue;
daimamodel = _datamodellist[_selectindex];
_selectindex++;
}
//do something
_finishcount++;
if (_finishcount == _datamodellist.Count)
{
AutoReset.Set();//最后一个线程完成后才终止
}
}
}