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