Это скребок для головы.У меня есть форма с несколькими пользовательскими элементами управления.Первый раз, когда я создаю экземпляр этого все работает нормально.
Проблема возникает, когда я закрываю форму, а затем создаю второй экземпляр.Некоторые из моих элементов управления имеют событие, которое (условно) вызывается при наведении курсора мыши.В OnMouseOver()
непосредственно перед повышением MyEvent
все нормально, но в данный момент я ввожу MyControl_MyEvent
, метод IsDisposed
имеет значение true на форме и всех ее дочерних элементах управления.Это происходит несмотря на то, что точки останова в методе Dispose
формы и элементов управления никогда не срабатывают.
Ход событий, которые я описал выше, не уникален;Я могу вызвать ту же ошибку в нескольких других местах, но не пролистал через стек вызовов достаточно подробно, пытаясь найти точно, где IsDisposed
установлено в true.
//MyConrol
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (conditions)
{
if (MyEvent != null)
MyEvent(this, new EventArgs()); //nothing disposed here
}
}
//the first of several classes that have sbuscribed to the event
void MyControl_MyEvent(object sender, EventArgs e)
{
//IsDisposed = true here if this is the second time the form has been displayed.
DoStuff();
}
protected override void Dispose(bool disposing)
{ //the breakpoint here is never triggered
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Может кто-нибудь предложитькак я могу понять, что происходит?