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?
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
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.
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