i have made a userControl library .. and it contains NetworkStream, StreamReader, FileStream
So do i have to Dispose them all when the form that has this userControl closes ??

I mean There's no such Form1_FormClosing(object sender,FormClosingEventArgs e) in a userControl so when should i dispose those streams?
Does userControl1.Dispose() take care of that?

thanks in advance :)

有帮助吗?

解决方案

UserControl.Dispose() disposes the components in it's Controls collection, but nothing more.

You can handle the UserControl.Disposed event, or you can properly implement the Dispose pattern.

For C# user controls, protected override void Dispose(bool disposing) is auto-created in UserControl1.Designer.cs. You can amend it to:

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

        // Dispose your streams here
    }

    base.Dispose(disposing);
}

其他提示

userControl1.Dispose() does not magically take care of it unless you override it and put in code to dispose your objects, which is what you should do.

Have a look at this answer to see how to implement it, replace the event de-regestering with your calls to dispose your streams.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top