![]() | |
![]() |
| | Thread Tools | Search this Thread | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
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 batterhead |
#3
| |||
| |||
|
|
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 batterhead |
#4
| |||
| |||
|
|
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(); } |
#5
| |||
| |||
|
|
Simon Hart wrote: 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(); } 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 |
#6
| |||
| |||
|
|
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 "Hilton" <nospam (AT) nospam (DOT) com> wrote in message news:hp3bj.32302$JD.4986 (AT) newssvr21 (DOT) news.prodigy.net... Simon Hart wrote: 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(); } 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 |
#7
| |||
| |||
|
|
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 "<ctacke/>" <ctacke[at]opennetcf[dot]com> wrote in message news:Ozvrp0JRIHA.2376 (AT) TK2MSFTNGP02 (DOT) phx.gbl... 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 "Hilton" <nospam (AT) nospam (DOT) com> wrote in message news:hp3bj.32302$JD.4986 (AT) newssvr21 (DOT) news.prodigy.net... Simon Hart wrote: 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(); } 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 |
#8
| |||
| |||
|
|
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 |
#9
| |||
| |||
|
|
Chris, 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 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 |
#10
| |||
| |||
|
|
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 "Hilton" <nospam (AT) nospam (DOT) com> wrote in message news:IRmbj.784$6%.53 (AT) nlpi061 (DOT) nbdc.sbc.com... Chris, 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 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 |
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
| |