Заботится ли userControl1.Dispose() обо всех своих одноразовых объектах?

Я сделал библиотеку userControl.. и она содержит NetworkStream, StreamReader, FileStream
Так я должен избавиться от них всех, когда форма, которая имеет этот userControl закрывается??

Я имею в виду Там нет такого Form1_FormClosing(object sender,FormClosingEventArgs e) в userControl так, когда я должен располагать эти потоки?
Обрабатывает ли userControl1.Dispose() это?

заранее спасибо:)

2 ответа

Решение

UserControl.Dispose() располагает компонентами в Controls коллекция, но не более того.

Вы можете справиться с UserControl.Disposed событие, или вы можете правильно реализовать шаблон Dispose.

Для пользовательских элементов управления C# protected override void Dispose(bool disposing) автоматически создается в UserControl1.Designer.cs, Вы можете изменить его на:

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        if (components != null)
        {
            components.Dispose();
        }

        // Dispose your streams here
    }

    base.Dispose(disposing);
}

userControl1.Dispose() волшебным образом не позаботится об этом, если вы не переопределите его и не введете код для удаления ваших объектов, что вам и следует делать.

Посмотрите на этот ответ, чтобы увидеть, как его реализовать, замените отмену обработки события вашими вызовами, чтобы избавиться от ваших потоков.

Другие вопросы по тегам