ThinkGeo.com    |     Documentation    |     Premium Support

Random NullReferenceException

Hello,


I'm encoutering another random problem, and I cannot figure where it comes from :


Some times, when loading the map for the first time, I get this exception :


System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

   bei ThinkGeo.MapSuite.WpfDesktopEdition.GdiPlusLayerTile.x72e495c788ab064e(Object xe0292b9ed559da7d, RunWorkerCompletedEventArgs xfbf34718e704c6bc)

   bei System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)

   bei System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)

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

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


Translation : Object reference not set to an instance of an object.


This exception is thrown many times, I think it could be one exception per loaded tile. 


I'm using the WmsOverlay, with a custom WmsServer, and I've created a CustomWfsLayer which inherits from featureLayern, in order to load features from a Wfs Server. I think this exception can come from one of thoses two layers, but I'm not sure.


Once again, it's pretty difficult to give you some more informations, cause I cannont break in. As the callstack says, this exception comes probably from an Asynchron Worker, but where exactly ?


It is possible that it comes from my code, but I don't have any informations on how to find it. Is there a problem with the pictures sent by the Wms Server ? Or with the features sent by the Wfs Server ? Or is it another Problem ?


Any help or advice will be very helpfull,

Thanks,

Guillaume.



Hi Guillaume, 
  
 To explain this issue, I’ll introduce you the tile system in the Wpf Desktop Edition. You know WmsOverlay and LayerOverlay are inheriting from TileOverlay and TileOverlay is formed by several tiles. This is the main difference from the Desktop Edition. So the we can get better user experience during panning and zooming.  
  
 I see you are using WmsOverlay for your custom server and a LayerOverlay for your custom feature layer. Here is the point. We have different tile objects work with different overlays; for example WmsOverlay fills with UriTile while LayerOverlay fills with GdiPlusLayerTile. 
  
 From the exception you pasted, I can figure out the exception is from your LayerOverlay with your custom feature layer and the exception throws during the multithread to get the features from the your custom server. 
  
 Would you mind to send me a small sample so that I can recreate this issue. On the other hand, you can try to set TileType to SingleTile for the LayerOverlay and try again. If the sample is private, please send to support@thinkgeo.com and ask them to forward to me. 
  
 As always, thanks for your reporting and I think your support makes our product powerful. 
  
 Thanks, 
 Howard 


Hi Howard, 
  
 Thanks for your answer. 
 I just tried to set the TileType to SingleTile for my Custom Overlay, but I had this exception again. 
  
 Then, I tried to create a sample application using a WmsOverlay and a my CustomWfsLayer, with my Wms and Wfs servers, but I cannot have this exception in this sample application. 
  
 In my application, I just noticed that this Exception comes when I don’t display the CustomWfsLayer too. 
 I’m using 2 InMemoryLayers in my application too, can this exception come from those layers ? 
 I’ll try to reproduce this Problem in my small application, but i seems a bit difficult to reproduce that easily. I’ll try. 
  
 Thanks, 
 Guillaume. 
  
 P.S. I’ll have to say that this new WfsDesktopEdition has really a better user experience as the old one. It’s really good, thanks for that.

Guillaume, 
  
 I still cannot recreate your issue. So now I assume you have three overlays; one is the WmsOverlay, and a LayerOverlay which works with your cumstomWfsLayer, and the third one is a LayerOverlay with two InMemoryFeatureLayers. Because now I’m sure the exception is from GdiPlusLayerTile so we can exclude the WmsOverlay; and you have set the second LayerOverlay which works with you customWfsLayer to single tile; it won’t throw an exception as you pasted because single tile won’t draw in another thread. Now we have only one LayerOverlay left which might be the one to throw the exception. But I cannot figure out why. 
  
 Could you try to commend out the rest of your overlays and try to confirm if my guess is right. Then set the overlay to SingleTile to see if the exception still exists; if yes; please let me know the new exception message. 
  
 On the other hand, I have found a potential issue which may throw this exception, but I cannot test for I cannot recreate the issue; so please get the latest version and have a try. 
  
 Thanks and appreciate your testing. 
 Howard

Hello Howard, 
  
 It seems that setting the TileType to SingleTile for my InMemoryLayer solved the problem. 
 I cannot be 100% sure yet, because I cannot recreate this issue on demand, but I played for some hours yet with this SingleTile type, and I didn’t have this exception again. 
  
 For now it is solved for me. 
 Thanks for your help once again. 
 Guillaume. 


Hi Guillaume, 
  
 You are welcome; please let me know if you have more queries. 
  
 Thanks, 
 Howard