private void DownloadTiles(object args)
{
var downloadFinished = args as ManualResetEvent;
// Loop through the tiles, and filter tiles that are already on disk.
var downloadTiles = new List<TileInfo>();
for (var i = 0; i < _tiles.Count(); i++)
{
if (!_fileCache.Exists(_tiles[i].Index))
{
downloadTiles.Add(_tiles[i]);
}
else
{
// Read tiles from disk
var name = _fileCache.GetFileName(_tiles[i].Index);
// Determine age of tile...
var fi = new FileInfo(name);
if ((DateTime.Now - fi.LastWriteTime).Days <= _tileTimeOut) continue;
File.Delete(name);
downloadTiles.Add(_tiles[i]);
}
}
if (downloadTiles.Count > 0)
{
int count = 1;
int allCount = 100;
while ((count - 1) * allCount < downloadTiles.Count)
{
try
{
int temp = allCount;
if (count*allCount > downloadTiles.Count)
temp = downloadTiles.Count - (count - 1)*allCount;
var doneEvents = new MultipleThreadResetEvent(temp);
ThreadPool.SetMaxThreads(25, 25);
for (int i = 0; i < temp; i++)
{
TileInfo t = downloadTiles[(count - 1)*allCount + i];
object o = new object[] {t, doneEvents};
ThreadPool.QueueUserWorkItem(DownloadTile, o);
}
doneEvents.WaitAll();
doneEvents.Dispose();
//Thread.Sleep(10);
count++;
}
catch (Exception ex)
{
MessageBox.Show("下载异常:" + ex.Message);
}
}
}
if (downloadFinished != null) downloadFinished.Set();
}