• Home
  • My College Team Blog
  • My Poetic Feelings
Blue Orange Green Pink Purple

welcome!

 

ToolTip and "Cannot access a disposed object" exception


The "Cannot access a disposed object" exception is a nightmare for .NET developers. ;) Sometimes, this exception causes the worst backslash for a development project. And looking at exception details, we will find that the call stack will point to

"at System.Windows.Forms.Control.CreateHandle()
 at System.Windows.Forms.Control.get_Handle() "

Or

"at System.Windows.Forms.Form.CreateHandle()
 at System.Windows.Forms.Form.get_Handle() "

Since, we do not know from where the problem stems, it becomes a trial-and-error method to find out the source of the problem. After some days of research, I found out the following facts about the problem. Here it goes.


Reason :

   This exception occurs only when we try to access any disposed object, as it says. But the problem is, we would have never written statements that explicitly access a disposed object! So the real reason would be some unseen code that accesses the disposed Form or Object. In my case, the black sheep was the ToolTip control.

   I had used the ToolTip to show messages on different forms. But the internal architecture of the ToolTip has been coded by a novice at Microsoft i guess, and its faulty. By going through reflection i found that it uses a variable to store the current form in which it the message is being displayed. I had used the same instance of ToolTip to show messages on other forms too. When I used the ToolTip to show messages on another form after the previous form has been closed, the ToolTip tries to access the form in its private variable (the closed/disposed form) and boom! It throws the exception!

   Another instance where this can happen is - Dockable Container, this happens with ToolTip when the container is changed/docked to another parent. Now since, the parent is changed, when the ToolTip tries to access the parent and it is already disposed. So the exception is thrown.

Solution:

   The solution I devised was to create a new ToolTip instance for every Form that I showed on the screen. This worked around the problem and it was solved. For those, with Dockable Container problem, try to recreate the controls when they are moved or docked. This will solve the problem.

   And microsoft is supposed to have corrected this problem in v3.5 framework. But I haven't checked it out yet.
Read More 2 comments | Posted by Jey Geethan edit post

2 comments

  1. Siddharth karnik on June 18, 2012 at 5:13 AM

    hmmm "creating new instance" everytime worked for me...thanx man..

     
  2. Johnny Avacado on December 11, 2012 at 7:14 PM

    The problem has not been fixed in the 3.5 Framework.

     


Post a Comment
Newer Post Older Post Home

Technologiques

  • About Geethan
      Geethan is a pragmatic developer who has a varied interest ranging from null to nil. And he also thinks the world needs more of tuples.

      This blog is a mix of his technical ramblings, his philosophical outlooks and also a bit of his personal life.
  • Blog Archive

    • ► 2009 (3)
      • ► November (1)
      • ► August (1)
      • ► June (1)
    • ▼ 2008 (4)
      • ▼ June (3)
        • ToolTip and "Cannot access a disposed object" exce...
        • Finding whether its Design Mode or Runtime Mode in...
        • Update requires a valid UpdateCommand when passed ...
      • ► May (1)

    Labels

    • .NET (3)
  • Search






    • Home
    • Posts RSS
    • Comments RSS

    © Copyright Technologiques. All rights reserved.

    Designed by FTL Wordpress Themes | Bloggerized by FalconHive.com brought to you by Smashing Magazine

    Back to Top