private void DoReadGrid(object state) { TaskState taskstate = state as TaskState; if (taskstate.FeatureClass.Disposed || taskstate.FeatureClass.DataSource == null) { return; } bool isLoaded = false; try { IGridReader reader = taskstate.FeatureClass.DataSource as IGridReader; IGrid grid = null; if (!reader.IsReady) { reader.BeginRead(); } grid = reader.ReadGrid(taskstate.GridNo); if (grid != null) { taskstate.FeatureClass.AddGrid(grid); isLoaded = true; } } catch (Exception ex) { Log.WriterException("RuntimeExchanger", "DoReadGrid", ex); } finally { if (taskstate.FeatureClass.DataSource != null) { if (isLoaded) { (taskstate.FeatureClass.DataSource as IFeatureDataSource).GridStateIndicator.Flaged(taskstate.GridNo); } else//read grid is failed,next time to read { (taskstate.FeatureClass.DataSource as IFeatureDataSource).GridStateIndicator.UnFlaged(taskstate.GridNo); } } Interlocked.Decrement(ref _readingTaskCount); if (isLoaded && _autoRefreshWhileFinishOneGrid) { _mapRefresh.ReRender(); } if (_asyncDataArrivedNotify != null) { _asyncDataArrivedNotify.SomeDataIsArrived(); } //int n = taskstate.FeatureClass.Grids != null ? taskstate.FeatureClass.Grids.Length : 0; //Console.WriteLine("Finished:" + n.ToString()); } }