2013-03-15 4 views
5

У меня есть приложение C#, которое я запускаю, а затем в какой-то момент приложение выдает ошибку, которая затем зацепилась, тогда приложение должно закончиться. И он заканчивается, но консольные окна остаются открытыми ...C# console не закрывается после завершения программы

Я даже проверил в windows task manager, под вкладкой applications, отображается моя консоль, но когда я нажимаю go to process, процесс этого приложения отсутствует.

Thats weird ... Приложение завершено, процесс закончился, но консоль остается включенной? Как я могу убить эту консоль?

Edit: мой код:

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() Kill(), 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

в вашем 'try', как вы закрыли приложение? Вы использовали Console.ReadLine(); затем Application.Exit(); – Pyromancer

+0

Нет .ReadLine() – ojek

2

Доброе утро,

это консоль приложение не закрывается, когда вы запускаете его из Visual Studio с прикрепленным отладчиком или оно также не закрывается при запуске f rom файловой системы/без прикрепленного отладчика?

Когда отладчик подключен, вы всегда увидите сообщение «Нажмите ENTER для выхода ...» (или подобное сообщение).

Говоря о диспетчере задач - вы видите там процесс * .vshost? Если да, это «требуется» Visual Studio и не является вашим «настоящим» консольным приложением; вы всегда будете видеть процесс * .vshost при запуске исполняемых файлов из Visual Studio.

Надеюсь, что это поможет

+0

: D Это было бы слишком легко. :) Я попытался отключить vshost, потому что это было единственное, что оставалось в дереве процессов. В любом случае, после того, как он выключился, консоль все еще остается включенной, просто нет процесса для этой консоли. И что касается первого вопроса - программа работает нормально в VS, консоль остается включенной только тогда, когда я запускаю ее под своей ОС. – ojek

Смежные вопросы