2013-03-15 73 views
5

私は実行中のC#アプリケーションを持っていて、ある時点でアプリケーションがエラーをスローした後に終了する必要があります。そして、それは終了しますが、コンソールウィンドウが開いたままになります...C#プログラムが終了した後にコンソールが終了しない

私もwindows task managerでチェックし、applicationsタブの下で、私のコンソールが表示されて、私はgo to processをクリックすると、そのアプリケーションのないプロセスはありません。

奇妙なこと...アプリケーションが終了しました。プロセスは終了しましたが、コンソールはオンのままですか?どのように私はそのコンソールを殺すことができますか?

編集:私のコード:

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(); 
      } 
     } 
    } 

第二編集:注:Process.Getprocess()キル()、Application.Exit()、Environment.Exit()は私のために働いていません、 Windowsのタスクマネージャーでは、処理が残っていないので、コンソールだけが開いたままです!

+0

コードを投稿できますか? – Prashant

+4

スレッドを使用しましたか? –

+0

@Prashant:私のコードを編集に掲載しました。 – ojek

答えて

4

Environment.ExitとApplication.Exit

Environment.Exit()はクリーナーです。

http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

+1

Application.Exit()を使用するには、コンソールアプリケーションにSystem.Windows.Formの参照を含める必要があります。この参照は、デフォルトでコンソールアプリケーションには必要ありません。 – Prashant

0
Environment.Exit(); 

この作品はだろうか?

+0

Process.GetProcess()。Kill()も機能していません。プロセスは何の問題もなく終了するので、コンソールウィンドウは開いたままになっているからだと私は思う。 – ojek

4
Environment.Exit(0); 

または

this.Close(); 

あなたが実行中のスレッドがある場合は、[終了]を呼び出す前に、あなたはこの強引な方法を試すことができます。

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

Process.GetProcess()。Kill()も機能していません。プロセスは何の問題もなく終了するので、コンソールウィンドウは開いたままになっているからだと私は思う。 – ojek

+0

あなたのアプリケーションを終了しましたか?あなたはConsole.ReadLine()を使いましたか?次にApplication.Exit(); – Pyromancer

+0

ありません.ReadLine() – ojek

2

おはよう、

はコンソールですデバッガを接続してVisual Studioから起動したときにアプリケーションが終了しない、または起動時に閉じられないROM /添付デバッガなしのファイルシステム?

デバッガが接続されていると、「終了して終了します...」(または同様のメッセージ)が表示されます。

タスクマネージャについて話すときに* .vshostプロセスが表示されますか? 「はい」の場合、これはVisual Studioによって「必須」であり、実際のコンソールアプリケーションではありません。 Visual Studio内で実行可能ファイルを起動すると、* .vshostプロセスが常に表示されます。

希望します。

+0

:Dこれは簡単すぎるでしょう。 :) vshostをオフにしてみました。なぜなら、それがプロセスツリーに残っていたからです。とにかくそれをオフにしてもコンソールはまだオンのままですが、そのコンソールにはプロセスが残っていません。 そして、最初の質問は - プログラムはVS内で正常に動作しますが、コンソールはOS上で実行している間のみ有効です。 – ojek

関連する問題