закрытие приложения Windows по запросу Windows (например, завершение работы)

я пишу проект приложения Windows, который я выполняю какое-то другое действие в его форме закрытия событий, теперь я ищу что-то, что вызывается извне, чтобы закрыть приложение, так как приложение не закрывается, наконец, в более старых ОС, это приводит к тому, что окна не выключается

вот мои события формы:

здесь я закрываю свой монитор над другим разделом (у меня есть монитор только при загрузке формы, и меня не волнует эта часть, она заканчивается через несколько секунд)

private void UserInterface_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (Monitor.TryEnter(_objStop))
            {
                Monitor.Exit(_objStop);
            }
            else
            {
                Monitor.Exit(_objStop);
            }
        }

следующий

private void UserInterface_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!_flagExit)
            {
                e.Cancel = true;
                HideForm();
            }
        }

теперь я ищу событие, которое приходит из окон, поэтому я переключаю _flagExist на true, прежде чем мое приложение отклонит закрытие (вместо этого попробуйте скрыть в панели уведомлений)


person deadManN    schedule 28.08.2012    source источник


Ответы (1)


Вы можете проверить CloseReason на FormClosingEventArgs

person JleruOHeP    schedule 28.08.2012
comment
есть несколько вариантов, один - выключение, а другой - диспетчер задач ... что еще я должен выбрать? как события Windows? - person deadManN; 28.08.2012
comment
Это зависит от того, что вы именно хотите :) И вы должны реорганизовать свой UserInterface_FormClosed - ваш if бесполезен... - person JleruOHeP; 28.08.2012
comment
я не уверен, что это ничего не делает, например, в моем сервисе я поставил блокировку, но сервис при запуске обошел мою блокировку: | - person deadManN; 28.08.2012
comment
и у меня есть значок уведомления, я хочу, чтобы пользователь закрывал форму вручную, вызывая метод hide(), иначе ничего не делать - person deadManN; 28.08.2012
comment
Я имел в виду, что вы можете вызвать Monitor.TryEnter, не проверяя его результат. А затем вызовите свой Monitor.Exit. Что касается закрытия, то есть причина закрытия UserClosing. - person JleruOHeP; 28.08.2012
comment
если он входит, это означает, что я не входил, поэтому я выхожу, а если он не входит, это означает, что я уже в мониторе, поэтому я снова выхожу ага, понял: вы имеете в виду вот так: Monitor.TryEnter(_objStop); Монитор.Выход(_objStop); - person deadManN; 28.08.2012
comment
это хорошо? private void UserInterface_FormClosing(object sender, FormClosingEventArgs e) { if (!_flagExit && !IsWindowsCalledClosingEvent(e.CloseReason)) { e.Cancel = true; HideForm(); } } private bool IsWindowsCalledClosingEvent(CloseReason closeReason) { return closeReason==CloseReason.WindowsShutDown||closeReason==CloseReason.ApplicationExitCall||closeReason==CloseReason.TaskManagerClosing; } - person deadManN; 28.08.2012