Приложение.Выход
-
21-08-2019 - |
Вопрос
Я использую VSTS 2008 + .Net 3.5 + C # для разработки приложения Windows Forms.Мое замешательство, кажется, в приложении.Выход не заставляет приложение завершаться?Если нет, то какой метод я должен вызвать, чтобы приложение завершило работу?
ПРАВКА 1:
Обычно основной метод выглядит следующим образом: как изящно выйти из основной функции без вызова Environment.Exit?
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new Form1());
}
catch (Exception ex)
{
Console.WriteLine (ex.Message);
}
}
заранее спасибо, Джордж
Решение
Application.Exit
на самом деле просто очень мягко запрашивает цикл сообщений.
Если вы хотите, чтобы ваше приложение завершило работу, лучший способ - изящно вывести его из Main
, и аккуратно закройте все дополнительные не фоновые потоки.
Если ты хочешь быть жестоким... Environment.Exit
или Environment.FailFast
? примечание это жестоко - примерно то же самое , что убить своего собственного Process
.
Другие советы
Попробуйте следующее:
Process.GetCurrentProcess().Kill();
Environment.Exit
не работает с Winforms и Environment.FailFast
выдает свое собственное исключение.
Если ваше приложение не завершается корректно при вызове Application.Exit
есть (очевидно) что-то, что мешает ему сделать это.Это может быть что угодно, начиная с настройки формы e.Cancel = true
в FormClosing
событие, к потоку, который не является фоновым потоком, который все еще выполняется.Я бы посоветовал вам тщательно изучить, что именно поддерживает жизнь вашего процесса, и завершить это приятным образом.Это также должно привести к хорошему закрытию вашего приложения.
Как правило, в приложении winforms этого должно быть достаточно, чтобы закрыть основную форму.
Я использую
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);
}
От http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx
У меня была такая же проблема, когда я обнаружил, что открытие новой формы / окна в программе и только СКРЫТИЕ этой второй формы (не закрытие ее) помешало бы правильному завершению основной формы через приложение.Exit();
В этом случае есть два решения.Первый - просто использовать Close() в основной форме вместо Application.Exit().Второе решение заключается в использовании следующего кода:
if (secondForm != null && !secondForm.IsDisposed) secondForm.Dispose();
Я обнаружил, что просто все, что вам нужно сделать, это вместо выполнения application.exit и все, что вам просто нужно сделать, это ввести End Достаточно просто команда End закрывает его