2012-10-19 14 views
13

Ich habe eine .Net-Windows-Formular-Anwendung, wo eine Vielzahl von Variablen im Main_Load-Ereignis initialisiert werden, und ich habe eine Situation, in der ich meine DB erneut abgefragt und alle Vars auf null und neu initialisiert (im Grunde das Formular) 100% von Anfang an neu geladen, aber ich schrieb meine Main-Load so (meine Schuld), dass es nicht so einfach ist zu tun ...Ist Application.Restart schlecht?

Ich weiß, ich könnte genau bekommen, was ich einfach will Anruf Application.Restart und es macht den Trick schön, aber ich bin mir nicht sicher, ob dies eine gute Programmierpraxis oder als wirklich schlecht angesehen wird.

Gibt es irgendwelche Probleme, denen ich wahrscheinlich begegnen werde, indem Sie Application.Restart in diesem Zusammenhang verwenden?

+5

Ich denke, das größte Problem, das Sie haben könnten, ist, wenn Ihre Kollegen Ihren Code sehen und WTF sagen ?! – Fernando

+0

... Zu spät, Fernando ... Sie sagen das schon die ganze Zeit: p –

+1

Könnten Sie nicht einfach den Code in Main_Load zu einer separaten Funktion abstrahieren und das dann aufrufen, wenn Sie es brauchen? Dann müssen Sie sich keine Gedanken über Nebenwirkungen machen, die nicht zu Ihrer Funktion gehören. –

Antwort

7

nicht freundlich zu debuggen die Arbeit tun, aber es gibt nichts wirklich falsch mit ihm. Es ist genau das gleiche wie das Beenden der App und das erneute Starten.

Sie können dies vermeiden, indem Sie einfach eine neue Instanz Ihres Hauptformulars erstellen und die alte schließen. Das erfordert jedoch, dass Sie verhindern, dass das Programm beendet wird. Code is here.

+0

Mit Ihrem Code, gibt es irgendwelche Nebenwirkungen? –

+3

Die Garantie ist es wert, was Sie dafür bezahlt haben. –

+0

@HansPassant Also mit anderen Worten: "Ich weiß es nicht"? ;-) –

2

Es ist nicht so, dass die Methode nicht funktioniert; Vielmehr vergessen Programmierer oft, dass sie etwas in ihren Code geschrieben haben, das die Anwendung davon abhält, automatisch herunterzufahren oder zu starten.

Bitte folgen Sie diesem Thread

Sie auch mit

System.Diagnostics.Process.Start(Application.ExecutablePath); 
Application.Exit(); 
+0

...Der Teil, der mich mit beiden Methoden erschreckt, ist, dass ich einen Breakpoint in mein Main.Load -Ereignis setze und es nicht beim zweiten Mal auslöst ... Ich schätze, das ist ein Problem mit dem Debugger in .Net, aber es ist definitiv macht mich vorsichtig mit diesem Ansatz ... Ist es schlecht? –

+0

Es ist nicht schlecht, wie es im Thread auch diskutiert wurde. Es ist nur, dass es nicht zuverlässig ist –

0

Um die Frage direkt im Titel zu beantworten, ist das Neustarten einer Anwendung zur Neuinitialisierung von Variablen eine schlechte Übung.

Es gibt Fälle, in denen das Neustarten einer Anwendung nützlich ist (im Beispiel Selbstaktualisierung), aber das Neustarten, um eine ReInitialize() Methode nachzuahmen, ist meiner Meinung nach schlecht.

+0

... Ich bin im Grunde selbst aktualisieren, wenn ich Sie richtig verstehe ... Meine Herausforderung ist, dass ich Dutzende von Liste Objekte habe ich in meiner Hauptform, wo ich sie Dim wie xyz als neue Liste (von ABC) gedimmt dann, in meinem main_load-Ereignis und während des gesamten Programms, das ich zu den Listen mit DB-Daten hinzufüge, und jetzt werde ich eine neue Frage benötigen, um sie zu füllen ... Ich fürchte, ich werde einen vermissen, wenn ich es versuche und leere sie alle ... –

0

Ich hatte Probleme damit.

Ich musste wirklich eine große Winforms-Anwendung neu starten, wenn sich ein Benutzer abmeldet, um sicherzustellen, dass alle zwischengespeicherten (meine) Daten gelöscht werden.

mein Problem gelöst, die Application.Restart durch Zugabe von() in das Anwendung Shutdown Ereignis. Diese

arbeitet innerhalb der VS-Umgebung und beim Ausführen der EXE

Wenn Sie das Ereignis wählen Sie Ihre Haupt-Projekteigenschaften finden wollen und von der Applikation (Side Tab) wählen Sie Ansicht Anwendungsereignisse an der Unterseite.

Meine Vermutung ist, dass dies funktioniert, weil es sehr spät im Abschlussprozess ist. Hoffe, das hilft jemandem und, noch wichtiger, es funktioniert weiter.