async private Task RenderSelection(IFeatureLayer fLayer, ICancelTracker cancelTracker) { if (fLayer == null || !(fLayer is IFeatureSelection)) { return; } if (fLayer.SelectionRenderer == null) { return; } IFeatureSelection fSelection = (IFeatureSelection)fLayer; if (fSelection.SelectionSet == null || fSelection.SelectionSet.Count == 0) { return; } RenderFeatureLayerSelection rlt = new RenderFeatureLayerSelection(this, fLayer, cancelTracker); //rlt.Render(); //Thread thread = new Thread(new ThreadStart(rlt.Render)); //thread.Start(); DrawingLayer.BeginInvoke(fLayer.Title, new AsyncCallback(AsyncInvoke.RunAndForget), null); await rlt.Render(); //while (thread.IsAlive) //{ // Thread.Sleep(10); // if (DoRefreshMapView != null && (count % 100) == 0 && cancelTracker.Continue) // { // DoRefreshMapView(); // } // count++; //} if (cancelTracker.Continue) { DoRefreshMapView?.Invoke(); } }
public override void HighlightGeometry(IGeometry geometry, int milliseconds) { if (geometry == null || _canvas != null) { return; } geometryType type = geometryType.Unknown; if (geometry is IPolygon) { type = geometryType.Polygon; } else if (geometry is IPolyline) { type = geometryType.Polyline; } else if (geometry is IPoint) { type = geometryType.Point; } else if (geometry is IMultiPoint) { type = geometryType.Multipoint; } else if (geometry is IEnvelope) { type = geometryType.Envelope; } if (type == geometryType.Unknown) { return; } ISymbol symbol = null; PlugInManager compMan = new PlugInManager(); IFeatureRenderer renderer = compMan.CreateInstance(gView.Framework.system.KnownObjects.Carto_SimpleRenderer) as IFeatureRenderer; if (renderer is ISymbolCreator) { symbol = ((ISymbolCreator)renderer).CreateStandardHighlightSymbol(type); } if (symbol == null) { return; } try { using (var bm = GraphicsEngine.Current.Engine.CreateBitmap(Display.iWidth, Display.iHeight, GraphicsEngine.PixelFormat.Rgba32)) using (_canvas = bm.CreateCanvas()) { DrawStream(_canvas, _msGeometry); DrawStream(_canvas, _msSelection); this.Draw(symbol, geometry); NewBitmap?.Invoke(bm); //.BeginInvoke(bm, new AsyncCallback(AsyncInvoke.RunAndForget), null); DoRefreshMapView?.Invoke(); Thread.Sleep(milliseconds); _canvas.Clear(); DrawStream(_canvas, _msGeometry); DrawStream(_canvas, _msSelection); //NewBitmap?.Invoke(bm); //.BeginInvoke(_bitmap, new AsyncCallback(AsyncInvoke.RunAndForget), null); DoRefreshMapView?.Invoke(); } } finally { _canvas = null; } }