C# Gotchas

C# Gotchas

I ran into my first bad encounter with C# garbage collection.  The destructor I added to my main application form wasn’t being called.  I tried forcing it with GC.Collect(), nothing.

What worked was adding IDisposable as a base class and implementing Dispose(), then adding a using{} block around my main form:

using (myMainForm = new MyMainForm()
{
.
Application.Run(myMainForm);
.
}

This seems to defeat the purpose of destructors, or at least the convenience of relying on them to do cleanup.

I don’t like the Dispose/using technique so I actually replaced it with a handler for the Form.Closing event.  Of course this only works with Form derived classes.

There may be something special about the main form preventing the destructor from being called.  I know the main form is being destroyed because it contains an object whose destructor DOES get called.

A few helpful web pages I googled in researching this anomoly:
http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=6905
http://www.ondotnet.com/pub/a/dotnet/2002/02/11/csharp_traps.html?page=1
http://www.andymcm.com/csharpfaq.htm

Leave a Reply