ThinkGeo.com    |     Documentation    |     Premium Support

Random crashes on overlay.refresh

 I've been getting quite regular but seemingly random crashes with the Map Suite which I think is occuring when a overaly refresh occurs. I suspect that this is an internal thread-synchronization error (even when setting tile-mode to single) and it cannot be consistently reproduced.  I'll try and explain the cause, and my crude solution.


Cause: In my app, I have a dynamically calculated number of maps on the screen at any one time. The user can select one or more shapefiles from a list and the maps are recreated each time. That is, any old maps are deleted, before new ones are added. Even if the user is switching between single shape files, the map gets recreated each time. However, when you are doing things very fast (such as different edits, then changing maps), quite often we get a Null reference error, or a dispatcher error. I'd say that the map is in the middle of an operation and we are destroying it while it is busy. I suspect that this might also occur after many rapid refreshes as well. Normally this crash can be traced back to a call to "overlay.Refresh()". Note that I think that this "refresh" occurs on a MouseEvent - as I'm constantly checking which polygon is under my mouse cursor, and updating statistics on the screen. There is a lot of Open, Close and Refresh gonig on with each move of the mouse.


My Crude Fix: My crude fix has been to handle this silently by something like this


try

{

      if (HasLoaded) editoverlay.Refresh();

}

catch (Exception ex)

{


     // do nothing


}


That does seem to keep things happy... in a "cover your eyes" sort of way!!!  it has certainly reduced the number of these crashes...  but I'm not sure of any consequences. Is this a bug in the engine core?? it appears to be so. Can you recomend any way of avoiding this?


 I should point out that I am removing all data upon destroying a map. I also test that the overlay exists when calling a Refresh(). The null exception seems to occur interally inside of the MapSuite dll.





Hi  David,
 
Attached is the sample code we wrote and couldn’t get the exception you described, 
 
Regards,
Edgar



post10870.txt (3.97 KB)
post10870.PNG (65.9 KB)

It is quite random, but unfortuantely not uncommon... next time I see it I will copy exception to clipboard and paste in this thread. I suspect that the constantly querrying on mouse move (without a timer link in your example) is pushing things conerning synchronisation with multithreading.



OK, we’ll wait for the stack trace info, and if you can provide your code we’d be appreciate. 
  
 Thanks, 
 Edgar