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.ToList().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]);
}
}
Logger.Debug("Number of download tiles:" + downloadTiles.Count);
if (downloadTiles.Count > 0)
{
// 2. Download tiles...
//var doneEvents = new ManualResetEvent[downloadTiles.Count];
var doneEvents = new MultipleThreadResetEvent(downloadTiles.Count);
foreach (var t in downloadTiles)
{
object o = new object[] { t, doneEvents };
ThreadPool.SetMaxThreads(25, 25);
ThreadPool.QueueUserWorkItem(DownloadTile, o);
}
doneEvents.WaitAll();
Logger.Debug("End waiting for remote tiles...");
}
if (downloadFinished != null)
{
downloadFinished.Set();
}
}