Заботится ли userControl1.Dispose () обо всех своих одноразовых объектах? - PullRequest
1 голос
/ 24 марта 2012

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

Iзначит, в userControl нет такого Form1_FormClosing(object sender,FormClosingEventArgs e), поэтому, когда мне следует избавиться от этих потоков?
Об этом позаботится userControl1.Dispose ()?

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

Ответы [ 2 ]

4 голосов
/ 24 марта 2012

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);
}
0 голосов
/ 24 марта 2012

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

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

...