ThinkGeo.com    |     Documentation    |     Premium Support

Different exceptions when trying to dispose a map containing CAD

Hi there,

Me and my team experienced couple of different exceptions
while trying to constantly create and dispose maps with CadFeatureLayer. I created
a small demo app to highlight these issues and managed to reproduce most of
them. This is what we experienced:



System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.

InnerException: Unable to cast object of type 'Teigha.TD.OdDbDatabase' to
type 'Teigha.TD.OdDbObjectIterator'.

Source: CadDumperX86

StackTrace:

at CadDumper.DwgDxfCadDumper.Dump()

at CadDumper.DwgDxfCadDumper.GetFeatureStyles()

at CadDumper.CadDumper.GetCadFeatures() 


Also, second time I got it other way around:


System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.

InnerException: Unable to cast object of type
'Teigha.TD.OdDbObjectIterator' to type 'Teigha.TD.OdDbDatabase'.

Source: CadDumperX86

StackTrace:

at System.RuntimeMethodHandle.InvokeMethod(Object target,
Object[] arguments, Signature sig, Boolean constructor)

at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object
obj, Object[] parameters, Object[] arguments)

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

at
System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)

at
ThinkGeo.MapSuite.Core.CadFeatureSource.iRQ=(String cadPathFileName)

at
ThinkGeo.MapSuite.Core.CadFeatureSource.iBQ=()

at
ThinkGeo.MapSuite.Core.CadFeatureSource.GetAllFeaturesCore(IEnumerable`1
returningColumnNames)

at
ThinkGeo.MapSuite.Core.FeatureSource.GetBoundingBoxCore()

at
ThinkGeo.MapSuite.Core.FeatureSource.GetBoundingBox()

at
ThinkGeo.MapSuite.Core.FeatureLayer.GetBoundingBoxCore()

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

at
ThinkGeoMapTest.MapControl.<>c__DisplayClass3.<ThinkGeoWpfMap_Loaded>b__2()
in ThinkGeoMapTest\ThinkGeoMapTest\MapControl.xaml.cs:line 43

at
System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback,
Object args, Int32 numArgs)

at
MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,
Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

at
System.Windows.Threading.DispatcherOperation.InvokeImpl()

at
System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object
state)

at
System.Threading.ExecutionContext.RunInternal(ExecutionContext
executionContext, ContextCallback callback, Object state, Boolean
preserveSyncCtx)

at
System.Threading.ExecutionContext.Run(ExecutionContext executionContext,
ContextCallback callback, Object state, Boolean preserveSyncCtx)

at
System.Threading.ExecutionContext.Run(ExecutionContext executionContext,
ContextCallback callback, Object state)

at
System.Windows.Threading.DispatcherOperation.Invoke()

at
System.Windows.Threading.Dispatcher.ProcessQueue()

at
System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr
wParam, IntPtr lParam, Boolean& handled)

at
MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr
lParam, Boolean& handled)

at
MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)

at
System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback,
Object args, Int32 numArgs)

at
MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,
Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

at
System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority
priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)

at
MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam,
IntPtr lParam)

at
MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)

at
System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)

at
System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)

at
System.Windows.Threading.Dispatcher.Run()

at
System.Windows.Application.RunDispatcher(Object ignore)

at
System.Windows.Application.RunInternal(Window window)

at
System.Windows.Application.Run(Window window)

at
System.Windows.Application.Run()

at
ThinkGeoMapTest.App.Main() in ThinkGeoMapTest\ThinkGeoMapTest\obj\Debug\App.g.cs:line
0

at
System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)

at
System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence
assemblySecurity, String[] args)

at
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

at
System.Threading.ThreadHelper.ThreadStart_Context(Object state)

at
System.Threading.ExecutionContext.RunInternal(ExecutionContext
executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

at
System.Threading.ExecutionContext.Run(ExecutionContext executionContext,
ContextCallback callback, Object state, Boolean preserveSyncCtx)

at
System.Threading.ExecutionContext.Run(ExecutionContext executionContext,
ContextCallback callback, Object state)

at
System.Threading.ThreadHelper.ThreadStart()



This example cover adding and disposing only one map.
Trying with more maps that contain CadFeatureLayer with not so big CAD files (~7MB)
produced exceptions like these ones:



************* Inner Exception **************

Exception type:System.InvalidCastException

Exception message:Unable to cast object of type
'Teigha.TD.OdDbRegion' to type 'Teigha.TD.OdDbSymbolTableIterator'.

Exception source:CadDumperX64

Exception Target Site: Dump

at
CadDumper.DwgDxfCadDumper.Dump()

at
CadDumper.DwgDxfCadDumper.GetFeatureStyles()

************** Outer Exception **************

Exception
type:System.Reflection.TargetInvocationException

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

Exception source:WpfDesktopEdition

Exception Target Site: <DrawException>b__3

at
ThinkGeo.MapSuite.WpfDesktopEdition.Tile.<>c__DisplayClass5.<DrawException>b__3()

at
System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback,
Object args, Int32 numArgs)

at
MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,
Delegate method, Object args, Int32 numArgs, Delegate catchHandler)



and



************* Inner Exception **************

Exception type:System.InvalidCastException

Exception message:Unable to cast object of type
'Teigha.TD.OdDbProxyEntity' to type 'Teigha.TD.OdDbDatabase'.

Exception source:CadDumperX64

Exception Target Site: Dump

at CadDumper.DwgDxfCadDumper.Dump()

at
CadDumper.DwgDxfCadDumper.GetFeatureStyles()

************* Outer Exception **************

Exception
type:System.Reflection.TargetInvocationException

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

Exception source:WpfDesktopEdition

Exception Target Site: <DrawException>b__3

at
ThinkGeo.MapSuite.WpfDesktopEdition.Tile.<>c__DisplayClass5.<DrawException>b__3()

at
System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object
args, Int32 numArgs)

at
MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,
Delegate method, Object args, Int32 numArgs, Delegate catchHandler)



I’m using version 9.0.0.125. My test app is attached to
this message.



Looking forward to hear from you.



Regards,

Milos



PS. Because of the file size limitation I couldn't upload a CAD file that I was using while testing but you can find it on this site: cadmapper.com/. It's a last map available for download.




ThinkGeoMapTest.zip (10.8 KB)

Hi Milos, 
  
 It’s proved to be a bug in cad supports. We’ll work on it later. 
  
 Any process will be updated here. 
  
 Thanks, 
 Peter

Hi Milos, 
  
 It’s proved to be a bug in cad supports. We’ll work on it later. 
  
 Any process will be updated here. 
  
 Thanks, 
 Peter

Hi Peter, 
  
 this is a high priority thing for us so please prioritize it. Would it help to make this a support ticket? 
  
 Regards, 
 Milos

Hi Milos, 
  
 We are working on it. 
  
 Any update will let you know. 
  
 Thanks, 
 Peter

Hi Milos, 
  
 I got news from our development team and there is no update on it. But they will still work on it. 
  
 Sorry for any inconvenience. 
  
 Thanks, 
 Peter

Hi Peter, 
  
 Any updates? 
  
 Regards, 
 Milos

Hi Milos, 



Sorry to say that there is still not have any updates about that. 



We thought maybe it was caused by the high memory usage and we tested it without map control and still got the exception:“Unable to cast object of type ‘Teigha.TD.OdDbDatabase’ to type ‘Teigha.TD.OdDbObjectIterator’” with low memory usage. 



We tried upgrading the CAD supports and still got the same exception. 



We ares still working on it and hopefully we can fix it. 



Could you please give us more information about that? If there’s a way to work it around?  



Thanks, 

Peter

Hi Peter, 
  
 I’m sorry to hear that. Unfortunately, there is no work around for us since it happens while using map control. Also, we don’t have any other information to share besides that sand-box example I’ve already sent. Hopefully you can fix it soon. 
  
 Best regards, 
 Milos 


Hi Milos, 
  
 I think that the issue has been caused by Teigha third part dlls, the “CadFeatureLayer” depends on Teigha third part dlls. I try to replace the third part dlls with the latest version 4.01.00, but the issue is still exist. I’m confused why the map is disposed many times. What’s your applying scenario? If you have a simple description about your scenario, I will try to find a workaround. On the other hand, I’m working on updating the Teigha third party invoking APIs. I hope the latest version Teigha Apis are available.  
  
 Thanks,

Hi Don, 
  
 Thank you for taking the time to look at this because it is really important for us. Our application can contain multiple views and those views can contain map controls. Every time a user navigates from one view to another application disposes previous one (including map control(s)). I hope you now have a better overview.  
  
 Best regards, 
 Milos

Hi Don, 
  
 Are there any updates? 
  
 Best regards, 
 Milos

Hi Milos, 
  
 I am sorry reply you so late, it’s a complex problem and our developer is keep working for it. 
  
 Regards, 
  
 Don

Hi Milos, 
  
 I have fixed this bug, you can get the latest unmanaged dependencies.msi from ap.thinkgeo.com:5001/fbsharing/8at0IawL
  
 Thanks,

Hi Don, 



Thanks for the effort but after installing the new unmanaged dependencies we are now experiencing different issue. If you run our test application you will see something like this: 



System.Reflection.TargetinvocationException {“Exception has been thrown by the target of an invocation.”} 



InnerException: {“Method not found: ‘Void ThinkGeo.MapSuite.Core.GeoColor…ctor()’.”} 



StackTrace: 

    at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 

at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) 

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

at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 

at ThinkGeo.MapSuite.Core.CadFeatureSource.iRQ=(String cadPathFileName) 

at ThinkGeo.MapSuite.Core.CadFeatureSource.iBQ=() 

at ThinkGeo.MapSuite.Core.CadFeatureSource.GetAllFeaturesCore(IEnumerable`1 returningColumnNames) 

at ThinkGeo.MapSuite.Core.FeatureSource.GetBoundingBoxCore() 

at ThinkGeo.MapSuite.Core.FeatureSource.GetBoundingBox() 

at ThinkGeo.MapSuite.Core.FeatureLayer.GetBoundingBoxCore() 

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

at ThinkGeoMapTest.MapControl.<>c__DisplayClass3.
<thinkgeowpfmap_loaded>b__2() in ThinkGeoMapTest\ThinkGeoMapTest\MapControl.xaml.cs:line 34 

at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 

at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) 

at System.Windows.Threading.DispatcherOperation.InvokeImpl() 

at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state) 

at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 

at System.Windows.Threading.DispatcherOperation.Invoke() 

at System.Windows.Threading.Dispatcher.ProcessQueue() 

at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 

at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 

at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) 

at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 

at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler) 

at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) 

at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) 

at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) 

at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) 

at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame) 

at System.Windows.Threading.Dispatcher.Run() 

at System.Windows.Application.RunDispatcher(Object ignore) 

at System.Windows.Application.RunInternal(Window window) 

at System.Windows.Application.Run(Window window) 

at System.Windows.Application.Run() 

at ThinkGeoMapTest.App.Main() in ThinkGeoMapTest\ThinkGeoMapTest\obj\Debug\App.g.cs:line 0 

at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 

at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 

at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 

at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 

at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 

at System.Threading.ThreadHelper.ThreadStart() 

  

Best regards, 

Milos</thinkgeowpfmap_loaded>

Hi Milos, 
  
 I’m sorry for confusing development version and release version. The latest release setup unmanaged dependencies 9.0.0.160.msi can be downloaded from ap.thinkgeo.com:5001/fbsharing/yRCSxSxB.  
  
 Thanks,

Hi Don, 
  
 Sorry to inform you but it’s still not working. It seems like it’s looking for a version 3.8.2.0 and we have 4.0.0.0: 
  
 {“Could not load file or assembly ‘TD_SwigCoreMgd, Version=3.8.2.0, Culture=neutral, PublicKeyToken=’ or one of its dependencies. The system cannot find the file specified.”:“TD_SwigCoreMgd, Version=3.8.2.0, Culture=neutral, PublicKeyToken=”} 
  
 Best regards, 
 Milos

Hi Milos,



Seems like an old version is referencing, please download the latest version 9.0.0.162 at ap.thinkgeo.com:5001/fbsharing/cDB0y5fi to have a try.



Thanks,

Johnny

Hi Johnny, 
  
 Thank you for taking the time to look at this issue. Unfortunately it’s still not working. First time we tried it worked for some time and then crashed with AccessViolationException. We tried one more time and after that we couldn’t make it work at all. It crashed almost immediately with this exception: 
  
 An unhandled exception of type ‘System.IO.FileNotFoundException’ occurred in WpfDesktopEdition.dll 
  
 Could not load file or assembly ‘MapSuiteCore, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. The system cannot find the file specified.  
  
 As you can see it’s a wrong version again. 
  
 Best regards, 
 Milos

Hi Milos, 
  
 I can’t reproduce your issue, you can check your “Debug” or runtime directory, I guess there are some requirement assemblies absence, such as “MapSuiteCore, NetTopologySuite, GeoAPI etc. ”. If the issue is still exist, you can send your application to me. The attached is my test application. 
  
 Thanks,