ThinkGeo.com    |     Documentation    |     Premium Support

v5.5 Collection was modified; enumeration operation may not execute - exception

 Guys, I upgraded to 5.5.  Looks like you guys did some performance improvements which is good.  I am running into a new issue though:


I am occassionally getting the following exception when rendering one of my feature layers that uses a custom style.  This does not happen with 5.0.35.0, which was the last time I upgraded.



11/17/2011 15:20:03


Type : System.Reflection.TargetInvocationException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089


Message : Exception has been thrown by the target of an invocation.


Source : mscorlib


Help link : 


Data : System.Collections.ListDictionaryInternal


TargetSite : System.Object _InvokeMethodFast(System.Object, System.Object[], System.SignatureStruct ByRef, System.Reflection.MethodAttributes, System.RuntimeTypeHandle)


Stack Trace :    at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)


   at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)


   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)


   at System.Delegate.DynamicInvokeImpl(Object[] args)


   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)


   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)


 


Additional Info:


 


MachineName : SUP-NJI


TimeStamp : 17/11/2011 08:20:03 PM


FullName : Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null


AppDomainName : EMS.OCC600.Infrastructure.Shell.vshost.exe


ThreadIdentity : nji


WindowsIdentity : EMS-TCANADA\nji


Inner Exception


---------------


Type : System.InvalidOperationException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089


Message : Collection was modified; enumeration operation may not execute.


Source : WpfDesktopEdition


Help link : 


Data : System.Collections.ListDictionaryInternal


TargetSite : Void <DrawException>b__0()


Stack Trace :    at ThinkGeo.MapSuite.WpfDesktopEdition.Tile.<>c__DisplayClass2.<DrawException>b__0()


 


This will not be an easy one to duplicate .....



Klaus, 
  
 Thanks for the post, can you put some exception handling in the DrawCore of your custom style to see if it can be isolated to it happening to a certain feature or set of features?   
  
 Does it happen if you don’t use a custom style?   
  
 Thanks!

Clint, wrapping the content of DrawCore in my custom style within a try-catch does not catch this exception.  Also, I referenced a custom style but I doubt it has anything to do with this.  I cannot say what happens if I do not use a custom style and again, this would be tough to duplicate.  Some core drawing behavior, possibly in the Tile class has definitely changed.  Could this be related to the fix you put in for wrapping issues around an island maybe?  



Hi Klaus, 
  
  Is the exception even catch by the Dispatcher.UnhandledException handler? 


Yes, Carlos, this is where I am catching the exception.  Otherwise my app will crash.

Guys, 
  
   Just to chime in here and see what I can offer.  There is a property on the layer called something like drawing exception mode or something.  You cna set it to throw or draw the exception.  Make sure this is set to throw if you want to catch it.  If not then we catch it in the concrete version of the method call and you might never get it.  I just wanted to throw that in though I am not sure this has anything to do with it. 
  
 David

David,  I am setting DrawingExceptionMode on the layer and Overlay to DrawingExceptionMode.ThrowException, which is why I am catching the exception.

Klaus, 
  
 How often is this happening?  I know you say it won’t be easy to duplicate but can you recreate it consistently or give us anything else to go on?  
  
 Also has anyone else seen this behavior with 5.5? 
  
 Thanks!

Very frequently and yes, the exception can be recreated consistently. 
  
 The scenario is as follows: 
  
 - I have my base map, which comprises of World Map Kit data. 
 - I have an InMemoryFeatureLayer rendered using a custom style. 
 - If you click on the map, I find the feature you just click on and based on certain attributes change its symbology.  This causes the map to refresh.  It is this refresh action that triggers the exception. 
  
 The exception will occur once in every 3 map clicks and this is fairly consistent.  
  
 I am in no panic right now as I simply downgraded back to v5.0.35.0.  With this version I do not have this problem. 
  
 I cannot easily create a simply sample to reproduce.  But I may have to…

Thanks Klaus, we haven’t had any other reports of this or able to recreate this issue, so if it becomes important to upgrade to v 5.5 please provide a simple sample that recreates it and we will get to the bottom of it. 
  
 Thanks!

 Clint, me again on this issue.  


I will like to move forward to 5.5 so we do not fall behind but this exception keeps coming up.   As you can, the attached log file comprises mostly of exceptions being thrown from WpfDesktopEdition.Tile class.  This happens when I click on a feature in an InMemoryFeatureLayer hosted within a muti-tile overlay.


 I am sure that if you glance into that class, you will find a problem, which may be s a lot easier than for me trying to duplicate.   Furthermore, this is a well documented exception which has an easy fix such as calling ToArray or ToList on whatever is being enumerated upon in the Tile class.  As Carlos has pointed out in another thread, you have made some changes to you core, possible cloning layers and stuff, to allow for multi-core support, that is causing this.  


Also, problem does not exist in 5.0.35.0, the last 5.0 version I used. 


Thanks again.


 



errors.2011-12-12.1.txt (50.7 KB)

Thanks Klaus, we will take a look at it and let you know what we find out. 
  
 Thanks!

Klaus, 
  
 Can you try the latest daily build today version 5.5.31.0 and see if it is still happening.  the development team said they added some enhancements that may resolved the issue. 
  
 Also do you have any code like the following to enable layer cloning in your application? 
  
 layerOverlay.LockLayerMode = LockLayerMode.DoNotLock

Great stuff Clint.  However, I may have to wait for 5.5.32.0 as 5.5.31.0 was built on Dec 11.  I tried that version yesterday and also did today with same result. 
  
 No, I am not using LockLayerMode anywhere in my application.

Klaus, 
  
 So you didn’t enable the Layer Cloning while having the threading issues. Could you please provide a simple sample that recreates it? If not could you narrow it down and find which layerOverlay has this issue, and send that overlay to us so we can try to recreate it here? Thanks for the exception list you provided but I’m afraid that doesn’t have enough information.  
  
 Thanks! 


 Ben, there isn't such a thing as a simple sample in this case.  I will have to strip down the application and send it in.  


I will go ahead with the upgrade to 5.5.33.0 and catch these exceptions for now as they happen once every 10 clicks on the map, when querying for the closest feature. 



 Just let us know when you have more information so we can make it rolling. By the way thanks for your words here in gis.thinkgeo.com/Support/Dis...aspx#29871 and hope you like the new features.