Form automatisch schliessen
-
Hi ich habe ein kleines Programm geschrieben, dass ein angegebenes laufwerk einfach schließt. während überprüft wird ob das angegebene laufwerk geöffnet ist und bis es dann geschlossen ist läuft eine progressbar und man sieh ein label. soweit so gut nun möchte ich wenn das laufwerk geschlossen wurde eine meldung ausgeben(mache ich mit MessageBox.Show(...)). und sobald des User Ok bei der MessageBox klickt, soll sich das programm beenden aber wie mache ich das???
mit "System.Environment.Exit(-1);" funktioniert das super aber :
sollte man das nicht mit Application.Exit() o. Application.ExitThread() machen???und wo sind die unterschiede zwischen den drei methoden zum beenden der form???
lg rizi
-
if((MessageBox.Show("2. Instanz beenden?","Mehrfachausführung:",MessageBoxButtons.YesNo)) == DialogResult.Yes) { Application.Exit(); // Oder Close(); machen } else { // irgendwas anderes }
hmm da es ein GUI ist kannst auch
Close-Methode aufrufen.Wo da die genauen Unterschiede liegen kann ich Dir da auch nicht sagen sicher ist nur eines, durch die OOP sind die manche Aufrufe so eingeschachtelt und eingekapselt so das sich manches in der Abfolge der Aufrufe zum gleichen Ergebniss führt.
Ich meine damit im Falle bei Windows.Forms da dort ja für Fenster
explizit auch eine Close-Methode existiert gebe ich schonmal zu bedenken.Wer würde schon Application.Exit sofort in Einklang mit einem Fenster bringen. Ja gut wenn man mehrere Jahre Erfahrung mit dem Framework hat weiss man das, da kann man wenn man will überheblich wirken/werden.
Ein Fenster schliesst man nun bzw ein Formular schliesst man
Form <<---->> Close
Das is der tiefere Sinn der hinter OO Objektorientiert steckt.
In der Implementation passiert aber folgendes
Close-Methode ruft Application.Exit auf, und Application.Exit löst den eigentlichen Mechanismuss aus zum schliessen.
Macht man direkt den Aufruf Application.Exit spart man sich die Zeit
die der Rechenknecht braucht um von Close-Methode nach Application.Exit zu rufen.Das ist wie wenn Du zum erstenmal in ein Amt gehst Dich von Zimmer zu Zimmer kämpfst! Beim zweiten mal weist Du das Du auch direkt zu Zimmer 2A gehen kannst.
Nachteil des direkten Aufrufens: ob das Programm danach so gut noch lesbar ist vom Code her das steht auf einem anderen Blatt!
Das Close für das Formular ist besser für die Wartbarkeit eines Programmes, als wenn geschrieben wird Application.Exit.Ein Neuling kann sich leichter in den Quelltext einarbeiten wenn man liesst Close
Ich hoffe ich konnte mich etwas mit Dir verständigen
-
diese Prinzip was ich Dir verständlich machen ist nicht das einzige was hinter OOP steht aber es ist nicht explizit für Deine Frage sondern ist anzutreffen
in der ganzen OOP und den jeweiligen OOP-Programmiersprchen und denn dabei verwendeten Frameworks.HuiHui langer Satz
-
hi, ich habe beides(Close(), Exit()) ausprobiert und erhalte fogende exception:
System.ObjectDisposedException was unhandled
Message="Auf das verworfene Objekt kann nicht zugegriffen werden.\r\nObjektname: Form1."
Source="System.Windows.Forms"
ObjectName="Form1"Ich muss noch dazu sagen,dass es sich hier um das Hauptforumlar handelt,d.h ich habe es folgendermaßen gestartet:
Application.Run(new Form1());lg rizi
-
rizi2 schrieb:
hi, ich habe beides(Close(), Exit()) ausprobiert und erhalte fogende exception:
System.ObjectDisposedException was unhandled
Message="Auf das verworfene Objekt kann nicht zugegriffen werden.\r\nObjektname: Form1."
Source="System.Windows.Forms"
ObjectName="Form1"Ich muss noch dazu sagen,dass es sich hier um das Hauptforumlar handelt,d.h ich habe es folgendermaßen gestartet:
Application.Run(new Form1());lg rizi
Bitte mal Codetags nutzen!!!
So weiter zum Thema System.ObjectDisposedException sagt aus das das Objekt nicht mehr vorhanden ist Object disposed gegenstand geräumt.
Der Mülleimer hat Speicher frei gemacht.
Warum nutzt Du beides Exit und Close beides tut das gleiche unter Umständen etwas unterschiedlich schnell habe ich doch oben schon erklärt!Solltest Du also sowas im Code irgenwo in der Reihenfolge haben!
Application.Exit(); // Innerhalb Form1 dann räumt der Müllbeseitiger Form1 aus dem Speicher /* kommt jetzt irgendwann später auch vielleicht ausserhalb von Form1 der Aufruf von Close auf dieses Formular ist es nicht mehr vorhanden */ Form1.Close(); /* irgenwer frueher hier im Forum sagte mal: stocherst Du gern in Toten rum der Friedhofsverwalter Garbage Collector sagt dann System.ObjectDisposedException was soviel heisst lassen Sie den Toten in Frieden ruhen der kann nischt mehr */
Guckmal nach Du fummelst bestimmt an einer toten Instanz von einem Formular rum
Du bist sozusagen ein Leichenfletterer
ich hoffe das Wort ist richtig geschrieben