ThinkGeo.com    |     Documentation    |     Premium Support

Remove layer issue

With 3.0.348 I have a new issue while trying to remove a layer from an overlay.

This was working correctly with 3.0.335.


Most of the time, the map is refreshed correctly, but sometime (around 1/10) the map is not refreshed and the layer keep being displayed until the user force a refresh.


Here is my code, am I doing something wrong or is this a MS regression ?



 



Overlay.Lock.EnterWriteLock();

try

  {

    Overlay.Layers.Remove (Layer);

  }

finally

{

  Overlay.Lock.EnterWriteLock();

}

 



Map.Refresh();



I found some more information. 
  
 The first time I call the function above, it works. 
 If I call the function above two times, then only the first call works and only 1 layer is visibly removed. 
  
 Of course, if the user minimise and the maximise the application, the 2 layers are removed, so it’s only a refreshing issue. 
  
 Patrick.

Posted By Patrick on 07-12-2009 04:13 PM 

With 3.0.348 I have a new issue while trying to remove a layer from an overlay.

This was working correctly with 3.0.335.


Most of the time, the map is refreshed correctly, but sometime (around 1/10) the map is not refreshed and the layer keep being displayed until the user force a refresh.


Here is my code, am I doing something wrong or is this a MS regression ?



 


Overlay.Lock.EnterWriteLock();

try

  {

    Overlay.Layers.Remove (Layer);

  }

finally

{

  Overlay.Lock.EnterWriteLock();

}


 


 


Map.Refresh();



 



Patrick,
 
I think you did make some minor mistake as following:

LayerOverlay layerOverlay =(LayerOverlay) winformsMap1.Overlays["LayerOverlay"];
layerOverlay.Lock.EnterWriteLock();
try
{
    layerOverlay.Layers.Remove("StatesLayer");
}
finally
{
    //Here should exit wirte lock instead of enter write lock again.
    layerOverlay.Lock.ExitWriteLock();
}

winformsMap1.Refresh();



Let me know if you have any more problems.


Thanks.
 
Yale



 



Posted By Patrick on 07-12-2009 04:38 PM 

I found some more information. 



The first time I call the function above, it works. 

If I call the function above two times, then only the first call works and only 1 layer is visibly removed. 



Of course, if the user minimise and the maximise the application, the 2 layers are removed, so it’s only a refreshing issue. 



Patrick. 





 


Patrick,


 I tried the following codes and it works fine in version 3.0.348 both remove one and two layers in one button click events:
 

private void Form1_Load(object sender, EventArgs e)
        {
            winformsMap1.MapUnit = GeographyUnit.DecimalDegree;

            winformsMap1.CurrentExtent = new RectangleShape(-126.4, 48.8, -67.0, 19.0);
            winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);


            ShapeFileFeatureLayer worldShapeLayer = new ShapeFileFeatureLayer(@"…\PostsData\Countries02.shp");
            worldShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.County1;
            worldShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            ShapeFileFeatureLayer statesLayer = new ShapeFileFeatureLayer(@"…\PostsData\USStates.shp");
            statesLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.State1;
            statesLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.LineJoin = DrawingLineJoin.Round;
            statesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            ShapeFileFeatureLayer majorCitiesShapeLayer = new ShapeFileFeatureLayer(@"…\PostsData\MajorCities.shp");
            majorCitiesShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.City1;
            majorCitiesShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.City1(“AREANAME”);
            majorCitiesShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.BestPlacement = true;
            majorCitiesShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            LayerOverlay staticOverlay = new LayerOverlay();
            staticOverlay.Layers.Add(“WorldShapeLayer”, worldShapeLayer);
            staticOverlay.Layers.Add(“StatesLayer”, statesLayer);
            staticOverlay.Layers.Add(“majorCitiesShapeLayer”, majorCitiesShapeLayer);
            winformsMap1.Overlays.Add(“LayerOverlay”,staticOverlay);

            winformsMap1.Refresh();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            LayerOverlay layerOverlay =(LayerOverlay) winformsMap1.Overlays[“LayerOverlay”];
            layerOverlay.Lock.EnterWriteLock();
            try
            {
                layerOverlay.Layers.Remove(“StatesLayer”);
            }
            finally
            {
                //Here should exit wirte lock instead of enter write lock again.
                layerOverlay.Lock.ExitWriteLock();
            }

            winformsMap1.Refresh();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            LayerOverlay layerOverlay = (LayerOverlay)winformsMap1.Overlays[“LayerOverlay”];
            layerOverlay.Lock.EnterWriteLock();
            try
            {
                layerOverlay.Layers.Remove(“StatesLayer”);
                layerOverlay.Layers.Remove(“majorCitiesShapeLayer”);
            }
            finally
            {
                layerOverlay.Lock.ExitWriteLock();
            }

            winformsMap1.Refresh();
        }

 

Let me know if you have any more problems.
 
Thanks.
 
Yale

 

Yale, 
  
 You’re right, the bug is on my hand and it’s a typo. 
 Sorry & thank you. 
  
 Patrick.

Patrick, You are always welcome! 



Let me know if more problems happened. 



Thanks 



Yale