Title: Message

Tach Peter !!! ;)

 

-----Urspr�ngliche Nachricht-----
Von: Peter Koen [mailto:[EMAIL PROTECTED]
Gesendet: Dienstag, 18. November 2003 15:17
An: [EMAIL PROTECTED]
Betreff: RE: [Csharp.net] Constructor - Destructor

 

Nicht vermuten, Doku lesen :)

 

Sobald ein Objekt einen Finalizer hat wird es in der FReachableQueue eingeordnet wenn der GC aufgerufen wird (bspw. wegen zuwenig speicher oder wenn GC.Collect) aufgerufen wird. Dort wird des dann vom Servicethread abgearbeitet. D.h. du hast 0 Einflu� daran wann der Destructor wirklich gecalled wird. Au�erdem kann es dir im Zweifelsfall passieren, dass trotz GC.Collect das Objekt nicht finalisiert wird. N�mlich genau dann wenn es in einer �lteren Generation liegt.

 

Wenn du unbedingt eine definierte Ausf�hrung eines CleanUp Codes brauchst dann solltest du auf das Dispose-Pattern zur�ckgreifen (siehe mein letztes Mail)

 

Gru�

Peter

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of A-Schubert
Sent: Dienstag, 18. November 2003 14:58
To: [EMAIL PROTECTED]
Subject: AW: [Csharp.net] Constructor - Destructor

Das Problem hatte ich auch schon mal.

Das h�ngt irgendwie mit dem GarbageCollector zusammen.

Wenn du den Destruktor aufrufst dann wird das dem GarbageCollector �bergeben und der r�umt erst dann auf, wenn nicht mehr gen�gend Speicher im System verf�gbar ist.

Du musst also dem GarbageCollector explizit sagen, dass er den Destruktor ausf�hren soll.

 

-----Urspr�ngliche Nachricht-----
Von: Stephan Hartmann [mailto:[EMAIL PROTECTED]
Gesendet: Dienstag, 18. November 2003 14:29
An: [EMAIL PROTECTED]
Betreff: [Csharp.net] Constructor - Destructor

 

Hallo,

 

ich habe gerade nach alter C++ - Gewohnheit die sch�ne Sanduhrklasse versucht:

 

public class Sanduhr {

    private Cursor OldC;

    private Form m_Wnd;

 

     public Sanduhr(Form Wnd) {

         m_Wnd = Wnd;

         OldC = m_Wnd.Cursor;

         m_Wnd. Cursor = Cursors.WaitCursor;

     }

 

    ~Sanduhr() {

        m_Wnd.Cursor = OldC;

    }

}

(Anwendung ist in C++ - Programmen so, da� man nur eine Instanz der Klasse in der Funktion deklariert, w�hrend der die Sanduhr angezeigt werden soll. Beim Verlassen der Funktion kommt die Klassenvariable aus der Lifetime, der Destruktor wird gerufen, und der vorherige Cursor ist wieder da. Sinn der �bung: Man kann's nicht mehr vergessen...)

 

Nun wird der Destructor nicht wie bei C++ dann gerufen, wenn die Klasse aus der Lifetime ger�t, sondern irgendwann, wenns dem Framwork einf�llt...

 

Kann ich das irgendwie deklarieren?

 

Danke, Gr��e

 Stephan

Antwort per Email an