public void Dispose() { _disposed = true; //clear load queue for thread exit _loadStack.Clear(); while (!_loadWorkerIsCompleted && _loadWorkerIsStarted) { Thread.Sleep(10); } _loadWorker.Dispose(); // if (_loadWorker != null) { _loadWorker.Dispose(); _loadWorker = null; } if (_tilesLocator != null) { _tilesLocator.Dispose(); _tilesLocator = null; } if (_tileCacheManager != null) { _tileCacheManager.Dispose(); _tileCacheManager = null; } if (_sleepTileCacheManager != null) { _sleepTileCacheManager.Dispose(); _sleepTileCacheManager = null; } if (_dataProviderReader != null) { _dataProviderReader.Dispose(); _dataProviderReader = null; } _dataProvider = null; _asyncRefreshCanvas = null; _canvas.OnEnvelopeChanged -= _canvasEnvelopeChanged; _canvas = null; }
public TileBitmapProvider(IRasterDrawing drawing, ICanvas canvas, IRasterDataProvider dataProvider, TileSetting tileSetting, int[] selectedBandNos, GeoDo.RSS.Core.DrawEngine.CoordEnvelope originalEnvelope, float originalResolutionX, float originalResolutionY, IRgbStretcherProvider stretcherProvider, string colortablename) { _drawing = drawing; _canvas = canvas; _dataProvider = dataProvider; _tileSetting = tileSetting; _selectedBandNos = selectedBandNos; _loadingName = _dataProvider.fileName; _colorTableName = colortablename; _tilesLocator = new NearestTilesLocator(_dataProvider, originalEnvelope, originalResolutionX, originalResolutionY); _tileCacheManager = new TileBitmapCacheManager(); _canvasEnvelopeChanged = new EventHandler(CanvasEnvelopeChanged); _stretcherProvider = stretcherProvider; CreateDataProviderReader(); CreateTileLoadWorker(); }