У нас есть объект, который не удаляется сборщиком мусора, и мы полагаем, что это происходит из-за события rouge, зарегистрированного для реконструированного объекта, который никогда не будет незарегистрированным.
Мы создали методэто работает, когда форма возвращается тоже.(Скажем, например, мы переходим от формы A к B, затем обратно к A. Метод будет работать на обратно к A ).В этом методе мы проверяем, возвращаемся ли мы из формы B. Если мы затем создаем экземпляр этой формы и прикрепляем событие к .FormClosed
.
Этот код был получен от одного из наших партнеров.поэтому я не знаю причину, по которой они решили присоединить событие .FormClosed
, когда контекст события, к которому оно присоединено, должен быть, когда он уже закрыт.(Отсюда обратно к A ).
Чего я не знаю, так это как отсоединиться от события .FormClosed
, но при этом сохранить логику, которая там срабатывает?
Основой кода является:
private void Returning(object sender, EventArgs e)
{
CoreForm frmSomeChildForm = sender as CoreForm
if (frmSomeChildForm.Name == "frmB") // We are 'returning' from B
{
// Do stuff
frmSomeChildForm.FormClosed += new FormClosedEventHandler(SomeMethod);
}
}
private void SomeMethod(object sender, FormClosedEventArgs e)
{
// This was in the comments for the method:
// Event added to re-position the search panel back to the top by removing
//the other two panels and adding them back to the form.
// The code just calls parent methods of DLLs we don't have the source for.
}
Поскольку метод Returning
в основном вызывается, когда мы возвращаемся из формы B, имеет ли какой-то смысл, почему мы присоединяем .FormClosed
событие там?Разве я не могу сделать что-то подобное?
private void Returning(object sender, EventArgs e)
{
CoreForm frmSomeChildForm = sender as CoreForm
if (frmSomeChildForm.Name == "frmB") // We are 'returning' from B
{
// Do stuff
SomeMethod();
}
}
РЕДАКТИРОВАТЬ:
Итак, Returning
запускается в форме, которую мы возвращаем из события FormClosed()
.Таким образом, форма, из которой мы возвращаемся, уже должна быть закрыта.
Цель SomeMethod
не совсем ясна, но, похоже, она связана с сбросом отображения пары элементов управления.