ThinkGeo.com    |     Documentation    |     Premium Support

Ystem.IO.IOException was unhandled thrown by WMK

 I somehow got the WorldMapKitRenderLayer to throw the following exception:



System.IO.IOException was unhandled by user code


  Message="The process cannot access the file '\\\\sup-amr1\\gis\\wmk5\\LayersBoundingBoxes.ids' because it is being used by another process."


  Source="mscorlib"


  StackTrace:


       at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)


       at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)


       at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)


       at hhQ=.vFE=.Khk=(String xFE=, RtreeSpatialIndexReadWriteMode xVE=)


       at ThinkGeo.MapSuite.Core.RtreeSpatialIndex.OpenCore()


       at ThinkGeo.MapSuite.Core.SpatialIndex.Open()


       at ThinkGeo.MapSuite.Core.WorldMapKitRenderLayer.OpenCore() in C:\dev\LUT600 2.1.1\OCC600\Source\GIS\Modules\ThinkGeo\ThinkGeoLibrary\Layer\WorldMapKitRenderLayer.cs:line 3240


       at ThinkGeo.MapSuite.Core.Layer.Open()


       at ThinkGeo.MapSuite.WpfDesktopEdition.LayerTile.DrawCore(GeoCanvas geoCanvas)


       at ThinkGeo.MapSuite.WpfDesktopEdition.Tile.uhM=(GeoCanvas uxM=)


       at ThinkGeo.MapSuite.WpfDesktopEdition.Tile.Draw(GeoCanvas geoCanvas)


  InnerException: 


When the map got into this state, I had to shut down the application.  Before this happened, I started getting a bunch of these errors attached.  This is with v5.5.31.0


I have seen this particular error before about the GeoCanvas not drawing but cannot remember what we did to solve it.  Attached is the draw core of my  WorldMapKitRenderLayer.  


 


.  


Could you guys please look into this  Thanks.?


 



 



 protected override void DrawCore(GeoCanvas canvas, Collection<SimpleCandidate> labelsInAllLayers)
        {
            try
            {
                RectangleShape extent = canvas.CurrentWorldExtent;
                object image = canvas.NativeImage;
                GeographyUnit unit = canvas.MapUnit;
                bool isInDrawing = canvas.IsDrawing;
                if (isInDrawing)
                {
                    canvas.EndDrawing();
                }

                Collection<string> candidateLayerNames = new Collection<string>();

                if (rtreeSpatialIndex != null)
                {
                    candidateLayerNames = rtreeSpatialIndex.GetFeatureIdsIntersectingBoundingBox(extent);
                }

                WorldMapKitShapeFileFeatureLayer layer = null;
                for (int i = 0; i < staticLayers.Count; i++)
                {
                    layer = staticLayers[i];
                    if (candidateLayerNames.Count == 0 || candidateLayerNames.Contains(Path.GetFileName(layer.ShapePathFileName)))
                    {
                        canvas.BeginDrawing(image, extent, unit);
                        layer.Open();
                        layer.Draw(canvas, labelsInAllLayers);
                        //layer.Close();
                        canvas.Flush(); //canvas.EndDrawing();
                    }
                }

                for (int i = 0; i < dynamicLayers.Count; i++)
                {
                    layer = dynamicLayers[i];
                    if (candidateLayerNames.Count == 0 || candidateLayerNames.Contains(Path.GetFileName(layer.ShapePathFileName)))
                    {
                        canvas.BeginDrawing(image, extent, unit);
                        layer.Open();
                        layer.Draw(canvas, labelsInAllLayers);
                        //layer.Close();
                        canvas.Flush();   //canvas.EndDrawing();
                    }
                }

                if (isInDrawing)
                {
                    canvas.BeginDrawing(image, extent, unit);
                }

            }
            catch (Exception ex)
            {
                ActionResponse.LogError(ex, "WMK Render Layer");
            }
        }


 Errors are attached.



errors.zip (6.13 KB)

Klaus, 
  
 Thanks for your post, are all of the shapefiles being opened ReadOnly?  Usually when we see this error it’s because two different processes are opening the file with ReadWrite access. 
  
 Hope this helps. 
  
 Thanks!

Clint, are per this line of code taken from the WorldMapKitRenderLayer 



var currentLayer = new WorldMapKitShapeFileFeatureLayer(shapefileName, ShapeFileReadWriteMode.ReadOnly);  



yes, some of the files are being opened in ReadOnly mode.


However, this is also this line of code 


var layer = new WorldMapKitShapeFileFeatureLayer(file); 


that calls the default constructor of ShapeFileFeatureSource(string shapePathFilename).  What mode does this constructor open the Shapefile?



The default constructor opens the shapefile in ReadOnly mode so there may be something else causing the issue.   Can you recreate it consistently?  Do any other applications access these files in Read/Write mode?  I’ve seen situation where you have the shapefile open in Map Suite Explorer and then when an application tries to load the same file it throws this error. 
  
 Also I noticed that it looked like you were pulling the world map kit files from a network drive, can you try moving the data local to the machine and see if the issue still happens?  This may help isolate the issue and see if it has something to do with the network.   
  
 Thanks! 
  
  


Clint, thanks for the response.   



You are correct in that our World Map Kit data is stored on a network drive.  This is to allow multiple uses share a common data set.   



I have been noticing the error on random occasions, probably coinciding when some other application was trying to access the data.  But, if I am opening the Shapefiles in ReadOnly mode, which I have confirmed by finding no occurrence of ShapeFileReadWriteMode.ReadWrite in my entire solution  does should I still be seeing this error?   



I will also mention that in v5.0.35.0, this error hardly ever occured.  Matter of fact, I do not recall seeing this in 5.0.35.0. 



I sincerely doubt there will be an issue if this data is moved to the local drive of the machine running the app.  Also, in production, these files will need to be accessed my multiple users. 



Will do some further investigation and get back to you on what triggers this.