Esempio n. 1
0
        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());
            }
        }