Ich bin neu in C # und habe versucht, mir die früheren Beiträge anzusehen, aber keine gute Antwort gefunden.
Verwenden Sie in einer C # Windows Form-Anwendung mit einem einzelnen Formular Form.Close()
besser oder Form.Dispose()
?
MSDN sagt, dass alle Ressourcen innerhalb des Objekts geschlossen sind und das Formular beim Aufrufen eines Abschlusses entsorgt wird. Trotzdem bin ich online auf einige Beispiele gestoßen, die eher einer Dispose als einer Close folgen.
Hat einer einen Vorteil gegenüber dem anderen? In welchen Szenarien sollten wir eines dem anderen vorziehen?
form.Visible = false;
, können Sie anrufenform.Hide()
. In der Tatform.Hide()
einfach setztthis.Visible = false;
.Antworten:
Dieses Forum auf MSDN sagt es Ihnen.
quelle
In der Regel würde ich immer empfehlen, die Dispose-Methode für jede Klasse, die sie anbietet, explizit aufzurufen, indem Sie die Methode entweder direkt aufrufen oder in einen "using" -Block einschließen.
In den meisten Fällen tun dies Klassen, die IDisposible implementieren, weil sie eine nicht verwaltete Ressource umschließen, die freigegeben werden muss. Während diese Klassen Finalizer haben sollten, die als Schutz dienen, hilft das Aufrufen von Dispose dabei, diesen Speicher früher und mit geringerem Overhead freizugeben.
Im Fall des Formularobjekts ist, wie im Link zu Kyra angegeben, die Close-Methode dokumentiert, um Dispose in Ihrem Namen aufzurufen, sodass Sie dies nicht explizit tun müssen. Für mich war es jedoch immer so, als würde ich mich auf ein Implementierungsdetail verlassen. Ich ziehe es vor, Close und Dispose immer für Klassen aufzurufen, die sie implementieren, um Änderungen / Fehlern bei der Implementierung vorzubeugen und um klar zu sein. Eine ordnungsgemäß implementierte Dispose-Methode sollte sicher mehrere Male aufgerufen werden können.
quelle
Wenn Sie nicht anrufen, wird
Close
wahrscheinlich das Senden einer Reihe von Win32-Nachrichten umgangen, von denen man denken würde, dass sie etwas wichtig sind, obwohl ich Ihnen nicht genau sagen kann, warum ...Close
hat den Vorteil, dass Ereignisse (die abgesagt werden können) so ausgelöst werden, dass ein Außenstehender (auf das Formular) achtenFormClosing
undFormClosed
entsprechend reagieren kann.Ich bin mir nicht sicher, ob
FormClosing
und / oderFormClosed
ob ich angehoben werde, wenn Sie das Formular einfach entsorgen, aber ich überlasse es Ihnen, damit zu experimentieren.quelle
Verwenden
using
ist ein ziemlich guter Weg:quelle
Close () - Die verwaltete Ressource kann vorübergehend geschlossen und erneut geöffnet werden.
Dispose () - Entfernt dauerhaft verwaltete oder nicht verwaltete Ressourcen
quelle
ShowDialog()
. AndernfallsClose()
wird auch das Formular entsorgt.Wenn Sie form.close () in Ihrem Formular verwenden und das FormClosing-Ereignis Ihres Formulars festlegen und entweder form.close () in diesem Ereignis verwenden, geraten Sie in eine unbegrenzte Schleife, und Argumente außerhalb des Bereichs sind aufgetreten. Die Lösung besteht darin, das Formular zu ändern .close () mit form.dispose () im Falle von FormClosing. Ich hoffe dieser kleine Tipp hilft dir !!!
quelle
Was ich gerade mit VS-Diagnosetools experimentiert habe, ist, dass ich dies nenne. Close () und dann das Ereignis formclosing ausgelöst. Wenn ich dann this.Dispose () am Ende des Formclosing-Ereignisses aufrufe, in dem ich viele andere Objekte darin entsorge, wird alles viel reibungsloser bereinigt.
quelle