ThinkGeo.com    |     Documentation    |     Premium Support

Desktop Edition has unhandled exception when winformsMap1 is closed while form is minimized

We use the Desktop Edition winformsMap1 control to display the maps from the World Map Data Kit.  Our application is an old-fashioned MDI forms using C# Forms (not using WPF yet).  We have the ability to dock and undocked the tab control tab where the winformsMap1 is defined.  If we minimize the MDI child form containing winformsMap1 and then close that form while it is still minimized, we get an exception which looks like it is originating from Winforms code in MapSuite.  Here is a partial stack trace from the exception:


[10] 2012-06-04 07:44:16,685 ERROR STTI.FAC.TestBed.Gui.Program Error encountered constructing TestBedGui. Exception: System.ArgumentException: Value of '{Width=2, Height=-20}' is not valid for 'MaximumBuffer'.

   at System.Drawing.BufferedGraphicsContext.set_MaximumBuffer(Size value)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.qBc=(Object qRc=, EventArgs qhc=)

   at System.Windows.Forms.Control.OnSizeChanged(EventArgs e)




I will attach the entire stack trace to this topic if anyone cares to see it.  Originally this exception was not being caught in our application and it caused our application to crash.  I have inserted a try-catch in the closest reference in our code which is nearly half-way down in the lengthy attached stack trace and it successfully prevents the application from crashing. 


However, I am wondering if anyone else has encountered a similar exception and if there is a better way to prevent it than just using the try-catch and ignoring it.  Is there a way to handle disposing of the winformsMap1  when it is closed while the containing form is minimized?


Thanks for any help with this.


Richard


 


 



Richard, 
  
 From the stack-trace, I couldn’t figure out what happened, in order to find the really issue, could you provide a simple sample to show your problem? 
  
 Thanks, 
 James

James,


Thanks again for the help.


I haven't been able to get the exception to occur in a simple sample yet.  Our application uses the winformsMap1 control inside a TabControl along with a toolstrip contained in a Form. This form is in a panel on the MdiChild form.  I will have to keep trying to duplicate this in the simple sample but I do not know if I will ever be able to get a simple sample to throw the exception. 


Richard



James,


Well, I finally waded through our application to find the source of this exception (or at least to find a way to prevent the exception).  It was actually even a little more complex than I had described above.  The winformsMap1 was embedded in a UserControl which was embedded in a "Component" (defined by our application) which was contained in the tabControl and so on.  I found that the "Component" had defined an event handler for the "disposing" event which simply set the "Container" of the "Component" to null without allowing it to call its base class "Dispose" method.  (If you are lost, so am I. I inherited this code and I am not sure I know why it is structured this way.)    Anyway, to avoid the exception, I add a call to the "Container" Dispose method before setting the "Container" to null and now it seems to clean up the UserControl containing the winformsMap1 before throwing the exception.


Thanks again for your help. Maybe someday I will have the time to really figure out why this is structured this way.


Richard


 


 


 



Richard, 
  
 I have read your reply, even it seems complicated, but I think you have resolve your problem, right? 
  
 Just let us know if you have more questions. 
  
 Thanks, 
 James

James,


Yes, I believe it is resolved.  It seemed to be a problem in our code with the way the "Dispose" is handled.


Thanks,


Richard



That’s Great.