Я работаю над приложением C#, которое имеет несколько форм.
Когда я открываю одну из форм, я добавляю прослушиватель событий следующим образом: SomeClass.MotionCompleted += new EventHandler(HandlerMethod);
. Событие MotionCompleted - статическое событие .Как отменить захват обработчиков событий в C#
Я заметил, что после закрытия этой формы HandlerMethod по-прежнему вызывается, когда происходит событие, которое затем вызывает исключение, потому что оно пытается обновить что-то в форме, которая больше не существует.
Как может существовать eventlistener и отвечать на событие, даже если форма больше не существует? Как только form.Close() или this.Close() вызывается, не должен автоматически отцеплять участников событий, чтобы они больше не вызывались?
Я подумал, что это был ответ, я просто надеялся, что это будет способ сделать это автоматически! – PICyourBrain
Вы должны сделать некоторые чтения в сборщике мусора .net. Поскольку событие является статическим, оно является «корневым» объектом a, содержит обработчик со ссылкой на вашу форму. Из-за этой ссылки ваша форма остается в живых, даже если вы думаете, что это не так. – Stormenet
OnFormClosing не является технически корректным, его можно отменить. Использовать OnFormClosed. Вырезание и вставка метода Dispose() из файла конструктора является еще более правильным. Это так же автоматически, как и в случае с ним. –