Какое событие сигнализирует об уничтожении UserControl?
У меня есть управляемый UserControl элемент управления, который отображает некоторую информацию, полученную с веб-сервера. В настоящее время я делаю инициализацию управления асинхронной, чтобы улучшить отзывчивость.
В моем обработчике событий загрузки я создаю источник CancellationTokenSource и используя связанный токен в различных асинхронных вызовах.
Теперь я хочу убедиться, что если пользователь закрывает форму до завершения операции async, операция будет отменена. Другими словами, я хочу называть Cancel на токене.
Я пытаюсь выяснить, где это сделать. Если бы было событие Unload, которое я мог бы заманить в ловушку, тогда это было бы идеально, но нет. На самом деле, я не могу найти подходящее событие.
Я мог бы захватить событие закрытия для содержащейся формы, но я действительно хотел сохранить все локальное значение в моем UserControl.
Предложения?
Ответы
Ответ 1
Я предлагаю событие Control:: HandleDestroyed. Он возникает, когда основной HWnd уничтожается (что обычно происходит, когда родительская форма закрыта). Чтобы обрабатывать его в своем собственном UserControl, вы должны переопределить OnHandleDestroyed.
В настоящий момент у вас есть полный доступ к свойствам управления, потому что он еще не удален.
Ответ 2
Другое решение
protected override void OnParentChanged(EventArgs e)
{
base.OnParentChanged(e);
if (parentForm != null)
{
parentForm.Closing -= parentForm_Closing;
}
parentForm = FindForm();
if (parentForm != null)
parentForm.Closing += parentForm_Closing;
}
void parentForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
parentForm.Closing -= parentForm_Closing;
parentForm = null;
//closing code
}
Ответ 3
Почему бы просто не использовать событие Disposed
?
Когда форма закрывается, она вызывается Dispose
сама по себе, и все дочерние элементы управления будут также рекурсивно размещены.
Ответ 4
Попробуйте следующее:
UserControl.Dispose();