2013-03-15 34 views
5

Ich habe C# -Anwendung, die ich ausgeführt habe, und dann in einigen Punkt-Anwendung wirft einen Fehler, der dann eingefangen wird, dann sollte App enden. Und es endet, aber Konsole Fenster bleibt offen ...C# Konsole wird nicht geschlossen, nachdem das Programm endet

Ich sogar eingecheckt windows task manager, unter applications Registerkarte, dort ist meine Konsole aufgeführt, aber wenn ich auf go to process klicken, gibt es keinen Prozess dieser Anwendung.

Das ist seltsam ... Anwendung beendet, Prozess beendet, aber Konsole bleibt an? Wie kann ich diese Konsole töten?

Edit: mein Code:

static class Program 
    { 
     static void Main() 
     { 
      try 
      { 
       //bunch of static methods from other static classes are being invoked 

       Setup.Driver.Close();//another static method 
      } 
      catch (Exception) 
      { 
       Setup.Driver.Close(); 
      } 
     } 
    } 

Zweite edit:. Hinweis: Process.Getprocess() kill(), Application.Exit(), Environment.Exit() nicht für mich arbeiten, Im Windows-Task-Manager gibt es keinen Prozess mehr zum Töten, nur die Konsole bleibt offen!

+0

Können Sie den Code veröffentlichen? – Prashant

+4

Haben Sie Gewinde verwendet? –

+0

@ Prashant: Posted meinen Code in Bearbeitung. – ojek

Antwort

0
Environment.Exit(); 

wird diese Arbeit?

+0

Nicht funktioniert, Process.GetProcess(). Kill() funktioniert auch nicht. Ich denke, das ist so, weil der Prozess ohne Probleme endet, nur das Konsolenfenster bleibt offen. – ojek

4
Environment.Exit(0); 

oder

this.Close(); 

Wenn Sie Threads laufen haben, können Sie diese Brute-Force-Methode versuchen, bevor Sie Exit-Aufruf:

using System.Diagnostics; 

ProcessThreadCollection currentThreads = Process.GetCurrentProcess().Threads; 

foreach (var thread in currentThreads) 
{ 
    thread.Interupt(); // If thread is waiting, stop waiting 

    // or 

    thread.Abort(); // Terminate thread immediately 

    // or 

    thread.IsBackGround = true; 
} 
+0

Nicht funktioniert, Process.GetProcess(). Kill() funktioniert auch nicht. Ich denke, das ist so, weil der Prozess ohne Probleme endet, nur das Konsolenfenster bleibt offen. – ojek

+0

in Ihrem 'Versuch' wie haben Sie Ihre Anwendung geschlossen? Haben Sie Console.ReadLine() verwendet? dann Application.Exit(); – Pyromancer

+0

Es gibt keine .ReadLine() – ojek

2

Guten Morgen,

ist die Konsole App wird nicht geschlossen, wenn Sie es von Visual Studio mit angehängtem Debugger starten, oder es ist auch nicht geschlossen, wenn Sie es starten f Aus dem Dateisystem/ohne angehängtem Debugger?

Wenn der Debugger angeschlossen ist, wird immer ein 'Drücken Sie ENTER zum Beenden ...' (oder eine ähnliche Nachricht) angezeigt.

Wenn Sie über den Task-Manager sprechen - sehen Sie den * .vshost-Prozess dort drin? Wenn ja, ist dies "erforderlich" von Visual Studio und ist nicht Ihre "echte" Konsolenanwendung; Wenn Sie ausführbare Dateien in Visual Studio starten, sehen Sie immer einen * .vshost-Prozess.

Hoffe, das hilft

+0

: D Das wäre zu einfach. :) Ich habe versucht, vshost auszuschalten, weil das das einzige war, was im Prozessbaum blieb. Wie auch immer, nach dem Ausschalten bleibt die Konsole eingeschaltet, es ist nur noch kein Prozess für diese Konsole verfügbar. Und wie für die erste Frage - Programm funktioniert gut in VS, Konsole bleibt nur eingeschaltet, wenn ich es unter meinem Betriebssystem ausführen. – ojek

Verwandte Themen