Как красиво выйти из этого приложения?

Чтобы не отображать форму в C # .NET при первом запуске приложения, у меня есть это:

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        SomethingForm frmSomething = new SomethingForm();

        Application.Run();
    }

Это приложение с одной формой, а SomethingForm - это родительская форма, у которой есть Button для выхода, которая в настоящее время вызывает следующий Application.ExitThread();. Эта кнопка - единственный способ выйти из приложения.

Теперь я знаю, что это не изящное завершение, но это был единственный способ заставить его работать во время тестирования. Теперь это вызывает некоторые проблемы, когда значок остается на панели задач после выхода.

Итак, как мне ПОЛНОСТЬЮ закрыть это приложение?


person Cheetah    schedule 26.07.2011    source источник


Ответы (3)


Просто вызовите this.Close () из формы. Предполагая, что это единственная форма, приложение должно корректно завершиться.

Немного менее изящный способ - использовать Application.Exit (). Проблема заключается в том, что события закрытия формы не возникают (исправлено после .NET 1.1).

person colithium    schedule 26.07.2011
comment
+1. Он выйдет, если нет других активных потоков переднего плана. - person Ryan Russell; 27.07.2011
comment
Ваше предупреждение Application.Exit () о закрытии формы относится только к .NET 1.1. - person Jay Riggs; 27.07.2011
comment
Я помню, как раньше пробовал Application.Exit (), и он был темпераментен в работе. Кажется, это работает независимо от того, что я сейчас делаю в своем приложении, так что это решение. ОДНАКО this.Close () НЕ работает - форма - единственная форма. - person Cheetah; 27.07.2011
comment
Спасибо, это было мое рабочее понимание того, как это работает, и страница msdn подтвердила это (не заметил, что я все еще был настроен на 1.1). Мне нужно идти в ногу со временем ... - person colithium; 27.07.2011

или используя:

Application.Exit() 

в любом месте кода.

or

System.Environment.Exit(-1);
person Carlos Quintanilla    schedule 26.07.2011

Как уже было сказано, вы можете Form.Close() или Application.Shutdown(). Возможно, вам придется изменить свой Application.Current.ShutdownMode на Shutdown.OnLastWindowClose или ShutdownMode.OnMainWindowClose (MSDN Application.ShutdownMode).

Вы также упомянули, что значок уведомления иногда задерживается в области уведомлений - одно из возможных исправлений - это вызов Dispose() в элементе управления NotifyIcon для освобождения его ресурсов.

РЕДАКТИРОВАТЬ: Мой совет может быть для приложения WPF, это было когда-то с тех пор, как я использовал WinForms. Я надеюсь, что вам (или кому-то еще) это пригодится.

person Dennis    schedule 26.07.2011