2012-04-13 4 views
6

Visual Studio Debug beendet nicht, wenn ich das Formular schließe, das ich in C# schreibe. Wie kann ich den Debug-Prozess stoppen, wenn ich das Formular schließe. Ich habe die Application.Exit() -Methode im Formular-Closing-Event hinzugefügt, aber es hat nicht funktioniert.Debug nicht beendet nach dem Schließen des Formulars in Visual Studio

Vielen Dank.

+1

Vielleicht läuft noch etwas Hintergrundverarbeitung? Sie können die Ausführung anhalten, nachdem Sie das Hauptformular geschlossen und das Fenster "Threads" überprüft haben. –

+1

Wenn Sie alles geschlossen haben, versuchen Sie "Break All" im Menü Debug in Visual Studio und sehen Sie, wo Sie landen. –

+0

Ja, ich habe festgestellt, dass einige meiner Threads noch laufen. Wie kann ich diese Threads stoppen? – sanchop22

Antwort

5

Versuchen Sie, diese von here

If (System.Windows.Forms.Application.MessageLoop) 
{ 
    // Use this since we are a WinForms app 
    System.Windows.Forms.Application.Exit() 
} 
Else 
{ 
    // Use this since we are a console app 
    System.Environment.Exit(1) 
} 

EDIT:

Wenn es laufen infinite Fäden dann tun

Thread myThread = new Thread(...); 
myThread.IsBackground = true; //set your running thread to background 
myThread.Start(...); 

Und Sie können sehen, wie? von here

+0

Nein, es hat nicht funktioniert. – sanchop22

+0

versuchen Sie dies.close(); nach Application.exit() – coder

+0

Es gibt StackOverflowException, wenn ich this.Close() nach Application.Exit() verwenden. – sanchop22

0

Eine andere Möglichkeit ist, dass Ihr Prozess in einer Ausnahme läuft, die nicht korrekt behandelt wird. Ich habe Exception-Nachrichten in Self-Build-Dialogen gezeigt, aber vergessen, das erstellte Fenster in einem Fall anzuzeigen. Also lief das Programm in die Exception, erstellte das Fenster, zeigte aber nichts davon ... also lief der Prozess auch wenn ich die Anwendung schloss.

1

Nun, das wird vier Jahre zu spät sein, aber ich dachte, ich würde dies für jeden anderen veröffentlichen, der auf dieses Problem (wie ich gerade), Entschuldigung im Voraus, wenn das ziemlich einfach ist, bin ich fair Neu bei C#, also hat mich das ein bisschen umgehauen.

Ich hatte das gleiche Problem wie OP, wo in meinem FormClosing-Ereignis weder Application.Exit() noch Environment.Exit (0) den Debugger beenden würde.

Die Sache, die ich fand, schaute auf die Referenzzählung über meinem FormClosing-Ereignis, es zeigte "0 Referenzen". Ich hatte gerade das Abschluss-Ereignis von einem anderen Forum kopiert und eingefügt, so dass es keinen Event-Handler gab, der das Ereignis, das ich erstellt/kopiert hatte, tatsächlich behandelte.

Eine einfache Möglichkeit, dies zu lösen (außer keinen Code kopieren und einfügen) war die Ereignisbehandlungsroutine zu erstellen:

  • Zuerst zum gehen "Form1.cs [Design] Registerkarte
  • Navigieren Sie zu dem ‚Eigenschaften‘ Feld
  • klicken Sie auf
  • Suche ‚Formclosing‘ ‚Events‘ und doppelklicken Sie, dass

Wenn Sie das gleiche Problem hatte shoul Sie Jetzt kann ich sehen, dass es mindestens einen Verweis auf das Ereignis gibt. Wenn Sie nun das Formular schließen, sollte es auch den Debugger stoppen.

0

Ich bin bei dieser Frage gelandet, weil VS nicht gestoppt wurde, als eine Debug-Anwendung heruntergefahren wurde.

Eine Möglichkeit zu sehen, was die Ursache für das Hängenbleiben der IDE sein könnte, ist, auf Pause zu klicken und auf der 'Debug Location' Werkzeugleiste alle noch laufenden Threads anzuzeigen. Für mich ist mir aufgefallen, dass es noch einen RabbitMq-Kontext gab, der nicht entsorgt wurde. Das war also der Schlüssel, den ich brauchte.

Nachdem ich den Code geändert habe, stoppt VS nun die Debugsitzung, sobald die Anwendung beendet wird.

Ich weiß, dass dies keine Lösung ist, die Sie vielleicht erwarten, aber herauszufinden, warum Anwendungen nicht richtig ausgehen oder Hintergrundprozesse am Leben erhalten, ist ein sehr schwieriges Thema. Die aktiven Threads Drop-Down ist der beste Ort, um imho aussehen.

Verwandte Themen