Ten kod wykona się natychmiast po wywołaniu Dispose() dla obiektu CustomControl. Proponujesz koledze tworzyć i zwalniać te obiekty przy każdym rysowaniu a odradzasz zwolnienie podczas destrukcji obiektu, obawiam się że nie znasz się nie tylko na C# a i na programowaniu jako takim.
wychodzi na to że masz rację. W takim radzie gdzie usunąć te obiekty
-
Tworzyć i usuwać za pomocą using w OnPaint
-
Utworzyć na poziomie klasy, usunąć w destruktorze
-
Utworzyć na poziomie klasy, wywołać funkcję zwolnij w zdarzeniu OnClosed formy.
-
Utworzyć na poziomie klasy, wywołać funkcję zwolnij w zdarzeniu OnClosing formy.
?
Alex, destruktor klasy Custom Control zostanie wywołany przy zamknięciu Formy?
Dobrze, że w php nie ma takich problemów
Po pierwsze - ten kod nie wykona się automatycznie po wywołaniu metody Dispose obiektu CustomControl.
Po drugie - metodę Dispose obiektu CustomControl i tak trzeba będzie zawołać ręczenie, gdyż ta nie wykonuje się automatycznie po zamknięciu okna.
Racja, tych w tym przypadku nie.
A co ja napisałem?
Jakich ograniczonych? Ja o zarządzanych piszę ;]
athei , nie powinieneś robić tego w zdarzeniach Form. Kontrolka powinna być samodzielnym, hermetyzowanym tworem, a nie zależeć od innych klas.
Albo rób to w OnPaint albo w Dispose.
- rozumiem
- czyli? W OnPaint Dispose jest automatycznie() wywoływane poprzez instrukcję using. Mi chodzi o to, żeby nie tworzyć tych obiektów i usuwać na okrągło. Niech będą w użyciu tak długo jak animacja chodzi, jak zamknę formę z tą animacją chce się ich pozbyć.
Zmierz ile trwa utworzenie i zniszczenie tych obiektów, bo może się okazać, że trwa wystarczająco krótko.
Nie.
Ten niby destruktor jest finalizerem, co zresztą pisze w dokumentacji języka C#. Nie ma gwarancji jego wykonania a co za tym idzie, gwarancji zwolnienia zasobów.
Można w obsłudze tego zdarzenia, jednak należy pamiętać, że zamknięcie okna nie jest równoważne jego zniszczeniu. Okno możne być ponownie otwarte, jeżeli taka jest wola programisty.
Z tego powodu, zasoby najlepiej alokować nie w konstruktorze klasy a w przeciążonej metodzie Show.
Można, ale trzeba mieć świadomość, że w obsłudze tego zdarzenia można anulować zamknięcie okna. W takim przypadku nie powinno się zwalniać zasobów.
Finalizer nie będzie i nie może być wywołany zaraz po zamknięciu formy. Przecież możesz chcieć formę otworzyć ponownie.