Solved! Go to Solution.
private void RemoveAcceleratedLayer(ESRI.ArcGIS.Client.Layer layer) { ESRI.ArcGIS.Client.GroupLayerBase container = Container(layer); if (container != null) RemoveAcceleratedLayer(layer, container); else MyMap.Layers.Remove(layer); } void RemoveAcceleratedLayer(ESRI.ArcGIS.Client.Layer layer, ESRI.ArcGIS.Client.GroupLayerBase gl) { System.Type Tds = layer.GetType().Assembly.GetType("ESRI.ArcGIS.Client.DrawingSurface"); var field = Tds.GetField("NativeLayerProperty", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public); var dependencyProperty = (DependencyProperty)field.GetValue(null); var nativelayer = layer.GetValue(dependencyProperty); var lockprop = nativelayer.GetType().GetProperty("Lock", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var lockobj = lockprop.GetValue(nativelayer, null); using (lockobj as System.IDisposable) gl.ChildLayers.Remove(layer); } ESRI.ArcGIS.Client.GroupLayerBase Container(ESRI.ArcGIS.Client.Layer layer) { return AllLayers(MyMap.Layers).OfType<ESRI.ArcGIS.Client.GroupLayerBase>().FirstOrDefault(gl => gl.ChildLayers.Contains(layer)); } System.Collections.Generic.IEnumerable<ESRI.ArcGIS.Client.Layer> AllLayers(System.Collections.Generic.IEnumerable<ESRI.ArcGIS.Client.Layer> layers) { return layers.Concat(layers.OfType<ESRI.ArcGIS.Client.GroupLayerBase>().SelectMany(glb => AllLayers(glb.ChildLayers))); }
private void HandleUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { if ( e.Exception is TargetInvocationException && e.Exception.InnerException is NullReferenceException && e.Exception.InnerException.StackTrace.Contains("DrawingSurface")) e.Handled = true; }
Application.Current.DispatcherUnhandledException += HandleUnhandledException;