у нас возникло несколько проблем с шаблоном IDisposable. В этом случае есть пользовательский элемент управления «ControlA» с FlowLayoutPanel, который содержит больше пользовательских элементов управления «ControlB».
При вызове Dispose (bool) я проверяю, удаляет ли утилита значение true и имеет ли IsDisposed значение false. Затем я пытаюсь явно расположить каждый ControlB в коллекции Controls FlowLayoutPanel.
Однако, если не проходит через все элементы управления, только 3 из 8 или 2 из 4.
Dispose(bool disposing)
{
if (disposing)
{
if (!IsDisposed)
{
//unhook events etc.
foreach(ControlB ctrl in flowlayoutpanel.Controls) //<-- there 8 controls
ctrl.Dispose(); //<-- called 3 times only
flp.Controls.Clear();
}
}
//make all members null
}
Мои вопросы: 1. Почему это происходит?
2. Каковы ваши лучшие практики и опыт использования вами пользовательских элементов управления и их дочерних элементов управления? Например. Вы постоянно отписываетесь от обработчиков событий и т. д.
Спасибо!