2016-05-17 18 views
0

У меня недавно была ситуация, когда у меня была форма, которую я перехватывал и обрабатывал сообщения. Все было нормально, когда форма была открыта, но после закрытия и открытия снова я получаю ObjectDisposedException.ObjectDisposedException при использовании IMessageFilter

я, наконец, понял, что мне нужно позвонить

Application.RemoveMessageFilter(this) 

при закрытии формы, в противном случае, она продолжала пытаться обрабатывать сообщения для закрытой формы. Я не видел здесь никаких вопросов/ответов, которые касались этого, поэтому я хотел добавить его, если у кого-то была такая же проблема.

Также в примере на MSDN не отображается удаление фильтра сообщений.

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

    public bool PreFilterMessage(ref Message m) 
    { 

    } 
} 

ответ

0

Обязательно позовите

Application.RemoveMessageFilter(this) 

как только вы закончите обработку сообщений (т.е. при закрытии формы)