|
Как определить причину закрытия приложения?
|
|||
---|---|---|---|
#18+
Собственно, вопрос уже был , но на него так никто и не ответил ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:48 |
|
Как определить причину закрытия приложения?
|
|||
---|---|---|---|
#18+
Насколько я вижу, по ссылке есть вопрос и есть ответ. Если что-то осталось неясным, лучше всё-таки расшифровать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:16 |
|
Как определить причину закрытия приложения?
|
|||
---|---|---|---|
#18+
Shocker.Pro Насколько я вижу, по ссылке есть вопрос и есть ответ. Если что-то осталось неясным, лучше всё-таки расшифровать. В WinForms есть событие FormClosed, и в обработчике из FormClosedEventArgs можно получить CloseReason - то бишь на крестик нажали, через диспетчер грохнули или комп вырубили. Вот нужно так же, но на WPF. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:37 |
|
Как определить причину закрытия приложения?
|
|||
---|---|---|---|
#18+
kikipumpa В WinForms есть событие FormClosed, и в обработчике из FormClosedEventArgs можно получить CloseReason - то бишь на крестик нажали, через диспетчер грохнули или комп вырубили. Вот нужно так же, но на WPF. Чем не устроил ответ в той теме 7836999 ? Событие Closing, отмена закрытия через e.Cancel = true;. Вы попробовали и у вас что-то не получилось? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2021, 16:04 |
|
Как определить причину закрытия приложения?
|
|||
---|---|---|---|
#18+
для всего этого в WPF отдельные события https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.application?view=net-5.0 Windows.Closing Application.Exit Application.SessionEnding ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2021, 18:19 |
|
Как определить причину закрытия приложения?
|
|||
---|---|---|---|
#18+
Eld Hasp kikipumpa В WinForms есть событие FormClosed, и в обработчике из FormClosedEventArgs можно получить CloseReason - то бишь на крестик нажали, через диспетчер грохнули или комп вырубили. Вот нужно так же, но на WPF. Чем не устроил ответ в той теме 7836999 ? Событие Closing, отмена закрытия через e.Cancel = true;. Вы попробовали и у вас что-то не получилось? Не устроил тем, что это ответ не на мой вопрос (и не на вопрос, который был задан в той теме) Я не пробовал, потому что это не то, что мне надо. Мне нужна причина закрытия. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2021, 09:04 |
|
Как определить причину закрытия приложения?
|
|||
---|---|---|---|
#18+
Roman Mejtes для всего этого в WPF отдельные события https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.application?view=net-5.0 Windows.Closing Application.Exit Application.SessionEnding А отловить закрытие через диспетчер как-нибудь можно? В Application такого события нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2021, 09:28 |
|
Как определить причину закрытия приложения?
|
|||
---|---|---|---|
#18+
kikipumpa, Смотря что вы понимаете под "закрытием из диспетчера". Если это клик на вкладке " Приложения" Завершить задачу то да: приложению будет послано сообщение WM_CLOSE. А если на вкладке "процесс" Kill task, то это можно считать грубым закрытием потому что процесс прерывается через TerminateProcess() и из него самого такой вызов отследить уже невозможно. Здесь нужны обходные шаги в виде другого мониторещего процесса ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2021, 12:11 |
|
Как определить причину закрытия приложения?
|
|||
---|---|---|---|
#18+
kikipumpa , вы бы детальнее описали реализуемую задачу. По вашим описаниям совершенно не понятно, что что вам надо. Необходимые детали: 1) Сколько окон в приложении? 2) Вам нужна обработка закрытия каких-то Окон или Приложения? 3) Какие механизмы "легального" закрытия Окна/Приложения есть в вашем Приложении? 4) Какие способы закрытия Окна/Приложения вам надо различать? Клик по кнопке в Окне, Alt-F4, Закрытие в Диспетчере задач и т.д.? И учтите: Не все способы закрытия Приложения возможно отловить внутри Приложения. Это относится ко всем типам Приложений: WPF, Формы, Консоль, Служба и т.д. Допустим, выдернули штепсель питания компьютера из розетки. kikipumpa А отловить закрытие через диспетчер как-нибудь можно? В Application такого события нет. Через "Диспетчер задач"? В общем случае - нет. И это не зависит от типа Приложения. Если вам нужно отслеживать процесс приложения, вам надо сделать отдельную службу следящую за его процессом. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2021, 14:17 |
|
Как определить причину закрытия приложения?
|
|||
---|---|---|---|
#18+
Eld Hasp kikipumpa , вы бы детальнее описали реализуемую задачу. По вашим описаниям совершенно не понятно, что что вам надо. Необходимые детали: 1) Сколько окон в приложении? 2) Вам нужна обработка закрытия каких-то Окон или Приложения? 3) Какие механизмы "легального" закрытия Окна/Приложения есть в вашем Приложении? 4) Какие способы закрытия Окна/Приложения вам надо различать? Клик по кнопке в Окне, Alt-F4, Закрытие в Диспетчере задач и т.д.? 1) Может быть много, но количество не имеет значения 2) Приложения (это написано в вопросе) 3) Такие же, как и в любом приложении (их много?) 4) Все, которые можно различить (основные я уже указал) Eld Hasp И учтите: Не все способы закрытия Приложения возможно отловить внутри Приложения. Это относится ко всем типам Приложений: WPF, Формы, Консоль, Служба и т.д. Допустим, выдернули штепсель питания компьютера из розетки. Спасибо, не знал, учту на будущее Eld Hasp Через "Диспетчер задач"? В общем случае - нет. И это не зависит от типа Приложения. CloseReason.TaskManagerClosing в Формах ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2021, 17:55 |
|
Как определить причину закрытия приложения?
|
|||
---|---|---|---|
#18+
kikipumpa 1) Может быть много, но количество не имеет значения 2) Приложения (это написано в вопросе) 3) Такие же, как и в любом приложении (их много?) 4) Все, которые можно различить (основные я уже указал) Eld Hasp Через "Диспетчер задач"? В общем случае - нет. И это не зависит от типа Приложения. CloseReason.TaskManagerClosing в Формах В этом отношении Формы и WPF значительно отличаются друг от друга. Формы разрабатывались очень давно и в них не заложена структурированность приложения. WPF же уже в значительной мере рассчитан на хорошо развитую структуру приложения и явное разделение функционала слоёв приложения. В такой структуре предполагается иерархия получение информации "родителей о детях". И механизмы подобной передачи в WPF реализованы широко. В основном это делается через механизм привязок и всплывающих событий. А вот обратное получение информации "детей о родителях" в современной структуре приложения встречается редко. Поэтому встроенных таких механизмов в WPF мало. В том числе это касается и определения причины закрытия приложения (Forms.CloseReason). Окно предназначено для Представления некоего набора Данных. Если требование закрыть приложение исходит из Данных, то Окно может его получить по привязке или по событию. Если же приложение закрывается по внешнему воздействию, то обработка его не относится к логике Окна. Оно должно обрабатываться на уровне App. И в большинстве случаев, оттуда даже не будет его передачи в Окно (или в Окна). Допустим, при автосохранении команда из App может уйти сразу в репозиторий минуя и View, и ViewModel, и Модель. Поэтому для вашей задачи в WPF нет некоего "общего места" где будут обрабатываться все возможные причины закрытия приложения. Если вам действительно нужна подобная логика, то наиболее подходящее место для неё - это App. Но реализовывать её придётся в большей части кастомно. В целом достаточно сомнительна необходимость в таком. Мне первый раз встречается потребность в реализации подобного. Более вероятно, что вы пытаетесь "перетащить" привычные вам методы работы с Формами на WPF. Это далеко не всегда уместно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2021, 20:16 |
|
|
start [/forum/topic.php?fid=21&tid=1440251]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
379ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 243ms |
total: | 721ms |
0 / 0 |