private void TileFetchLoop() { try { var retries = new Retries(_maxAttempts); while (_isThreadRunning) { if (_tileSource.Schema == null) { _waitHandle.Reset(); } _waitHandle.WaitOne(); Busy = true; if (_isViewChanged && (_tileSource.Schema != null)) { var levelId = BruTile.Utilities.GetNearestLevel(_tileSource.Schema.Resolutions, _resolution); _missingTiles = _strategy.GetTilesWanted(_tileSource.Schema, _extent.ToExtent(), levelId); _numberTilesNeeded = _missingTiles.Count; retries.Clear(); _isViewChanged = false; } _missingTiles = GetTilesMissing(_missingTiles, _memoryCache, retries); FetchTiles(retries); if (_missingTiles.Count == 0) { Busy = false; _waitHandle.Reset(); } if (_threadCount >= _maxThreads) { _waitHandle.Reset(); } } } finally { _isThreadRunning = false; } }
private void TileFetchLoop(object state) { try { var retries = new Retries(_maxAttempts); while (_isThreadRunning) { if (_tileSource.Schema == null) _waitHandle.Reset(); _waitHandle.WaitOne(); Busy = true; if (_isViewChanged && (_tileSource.Schema != null)) { var levelId = BruTile.Utilities.GetNearestLevel(_tileSource.Schema.Resolutions, _resolution); _missingTiles = _strategy.GetTilesWanted(_tileSource.Schema, _extent.ToExtent(), levelId); _numberTilesNeeded = _missingTiles.Count; retries.Clear(); _isViewChanged = false; } _missingTiles = GetTilesMissing(_missingTiles, _memoryCache, retries); FetchTiles(retries); if (_missingTiles.Count == 0) { Busy = false; _waitHandle.Reset(); } if (_threadCount >= _maxThreads) { _waitHandle.Reset(); } } } finally { _isThreadRunning = false; } }