Laden...

To CloseHandle() or not

Erstellt von x86fanboy vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.322 Views
X
x86fanboy Themenstarter:in
40 Beiträge seit 2005
vor 18 Jahren
To CloseHandle() or not

Folgende Klasse:



class Foo : IDisposable
{
     private IntPtr handle;

      public Foo(IntPtr handle)
      {
           this.handle = handle;
      }
}


Der Konstruktor bekommt das Handle des Fensters welches die Klasse instanziert übergeben. Muss ich in Dispose() CloseHandle(this.handle) aufrufen, oder reicht es den Pointer auf IntPtr.Zero zu setzen?

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo x86fanboy,

'handle' ist eine unmanged Ressource und muss deshalb explizit geschlossen werden.

Allerdings kann man darüber streiten, wer das tun muss. Der, der den Handle an Foo übergeben hat, oder Foo selbst.

herbivore

X
x86fanboy Themenstarter:in
40 Beiträge seit 2005
vor 18 Jahren

Hi herbivore!

Wahrscheinlich ist meine Intention nicht so richtig rübergekommen: es wird ja ein Pointer auf ein Windowhandle übergeben. Ich will dieses Handle nicht schliessen, da dass Fenster weiter existiert wenn obige Klasse entsorgt wird. Ich möchte den Pointer, den ich in der Klasse deklariert habe, ordnungsgemäß entsorgen und frage mich ob dazu CloseHandle notwendig ist, oder IntPtr.Zero ausreicht.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo x86fanboy,

mit CloseHandle schließt du den Handle (und damit das Fenster) und nicht den IntPtr. Da das Fenster nicht geschlossen werden soll, musst du gar nichts tun, nicht mal IntPtr auf null setzen. Die Entsorgung übernimmt hier vollständig der GC. Wenn es keinen anderen Grund gibt, musst du nicht mal IDisposable implementieren.

herbivore

X
x86fanboy Themenstarter:in
40 Beiträge seit 2005
vor 18 Jahren

Ok. Danke dir!