What is up.
RSS icon Email icon Home icon
  • C# Gotchas

    Posted on December 14th, 2005 Alan No comments

    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