Search code examples
c#winformsobjectdisposedexceptionimessagefilter

ObjectDisposedException when using IMessageFilter


I recently had a situation where I had a form that I was intercepting and processing messages for. Everything worked fine the first time the form was opened, but after closing and opening again, I would get an ObjectDisposedException.

I finally figured out that I needed to call

Application.RemoveMessageFilter(this)

when closing the form, otherwise, it kept trying to process messages for the closed form. I didn't see any questions/answers on here that addressed this, so I wanted to add it in case someone else had the same problem.

Also, the example on MSDN do not show removing the message filter either.

public partial class Template_Editor : Form, IMessageFilter
{
    public Template_Editor(ICollection<Vendor> vendorList)
    {
        InitializeComponent();
        Application.AddMessageFilter(this);
    }

    public bool PreFilterMessage(ref Message m)
    {

    }
}

Solution

  • Make sure to call

    Application.RemoveMessageFilter(this)
    

    once you are done processing messages (i.e. when closing the form)