all groups > dotnet compact framework > december 2007 >
You're in the

dotnet compact framework

group:

do we need to dispose screen controls?


do we need to dispose screen controls? Batterhead
12/21/2007 3:07:57 AM
dotnet compact framework: hi there,

i use vs2005, c# and .netcf2. i know that i have to explicitly dispose
any controls and components which created by myself. but how about
those controls, e.g. button, which drew by c# on the screen. as a good
practice, should i dispose them explicitly? or c# already does it for
me with the system generated code? where is the code?

i know they will be handled eventually by GC but it does not
guaranteed.

thanks
Re: do we need to dispose screen controls? ctacke/
12/21/2007 8:55:32 AM
If they are part of the Controls collection in a Form, then the Form will
dispose of them for you.


--

Chris Tacke, eMVP
Join the Embedded Developer Community
http://community.opennetcf.com


[quoted text, click to view]

RE: do we need to dispose screen controls? Simon Hart [MVP]
12/21/2007 2:07:02 PM
Just ensure you call dispose on your form. It is good practice to use the
using statement. ie: in C#:

using (MyForm form = new MyForm())
{
form.ShowDialog();
}

When control leaves the above block, the CLR will call Dispose on that form.
When creating a form via the Wizard, it will override the Dispose method of
the Component class and call Dispose on this for you. It overrides to clean
up the components object and so you can place stuff in there if you want.

You can find this in the designer partial class. ie MyForm.designer.cs.
--
Simon Hart
Visual Developer - Device Application Development MVP
http://simonrhart.blogspot.com


[quoted text, click to view]
Re: do we need to dispose screen controls? ctacke/
12/22/2007 7:18:28 AM
IIRC, The using keyword isn't available until CF 2.0 (Studio '05).


--

Chris Tacke, eMVP
Join the Embedded Developer Community
http://community.opennetcf.com




[quoted text, click to view]

Re: do we need to dispose screen controls? Hilton
12/22/2007 7:54:53 AM
[quoted text, click to view]

This doesn't compile, at least for me anyway (VS2003)

using (Form form = new Form ())
{}

Also, "(new Form () is IDisposable)" is false.

What am I doing wrong?

Hilton

Re: do we need to dispose screen controls? ctacke/
12/22/2007 5:38:33 PM
I just checked CF 1.0, 2.0 and 3.5 with Reflector and a Form is definitely
derived from IDisposable in all three.

Form->ContainerControl->ScrollableControl->Control->Component->IComponent->IDisposable


--

Chris Tacke, eMVP
Join the Embedded Developer Community
http://community.opennetcf.com




[quoted text, click to view]

Re: do we need to dispose screen controls? Hilton
12/22/2007 10:02:09 PM
Chris,

[quoted text, click to view]

OK, so:

Q1: Why does:

using (Form form = new Form()) {}

give the following compiler error:

c:\test\FormDispose\Form1.cs(32): Cannot implicitly convert type
'System.Windows.Forms.Form' to 'System.IDisposable'


....and..

Q2: Why does: "(new Form () is IDisposable)" return false?

Q1 is a compile time check, Q2 is a run-time and they're consistent.

Hilton

Re: do we need to dispose screen controls? Hilton
12/22/2007 10:45:37 PM
To follow-up my own post:

When I run (FormDispose.exe) with the line:

"MessageBox.Show (((new Form () is IDisposable).ToString()));"

it returns *false*. This is using CF 1.

Then I add the file FormDispose.exe.config so that FormDispose uses CF 2 and
guess what? Yip, it returns *true*.

Believe it, or not...

Hilton



[quoted text, click to view]

Re: do we need to dispose screen controls? Hilton
12/22/2007 10:54:52 PM
Chris,

"using" is definitely a 1.0 keyword. I use it all the time; e.g. "using
(StreamReader sr = new StreamReader (...))". The problem is that Form does
not implement IDisposable on CF 1. Now if Form all of a sudden does
implement IDisposable, then that is, by Microsoft's definition, "a breaking
change" and should not be done.

"(new Form () is IDisposable) return false on CF 1.0, but true on .NET
(desktop).

Interesting... Seems like a major screwup/oversight by Microsoft. Yes?

That's why I still think that the GC should have: "if o implements
IDisposable && (!o.Disposed) then o.Dispose" (pseudo code). But I was shot
down last time and I guess I will be again. So, Form does not implement
IDisposable on the Compact Framework - solve that. If it is in CF 2.0, that
is a breaking change and should not be done (according to Microsoft).

Comments?

Hilton



[quoted text, click to view]

Re: do we need to dispose screen controls? ctacke/
12/24/2007 11:04:16 AM
Well you have to believe the runtime. I can only conclude that I'm looking
at the wrong 1.0 binary (or at least not the one your system is using).
What version of 1.0 are you running?


--

Chris Tacke, eMVP
Join the Embedded Developer Community
http://community.opennetcf.com




[quoted text, click to view]

Re: do we need to dispose screen controls? Hilton
12/24/2007 9:23:26 PM
CF 1.0.4292.0 which is CF1 SP3

Try it, create a Pocket PC, add the line below and on CF 1, it shows false
(and using doesn't compile either).

Hilton



[quoted text, click to view]

AddThis Social Bookmark Button