2016-01-28 9 views
9

Aplikacja UWP uruchomiona na pulpicie może zostać zamknięta z górnego przycisku X, ale nie ma dla niej żadnego zdarzenia. Wiadomo, że na telefonach i tabletach aplikacja powinna polegać na zdarzeniu Suspending, niezależnie od tego, jak jest uruchamiana, a następnie aplikacja powinna polegać na ApplicationExecutionState.UWP na pulpicie zamkniętym przez górny przycisk X - brak zdarzenia

Istnieje jednak (być może) często spotykany scenariusz: na telefonach wystarcza zdarzenie Suspending, a jeśli zadzwoni telefon VoIP, będzie obsługiwane przez system operacyjny po zawieszeniu aplikacji. Na pulpicie oczekuje się, że użytkownik zamknie przycisk zamykania, aby całkowicie zamknąć aplikację. Jeśli więc połączenie jest w toku, należy je odwiesić, a niektóre zasoby powinny zostać zwolnione.

Skąd wiadomo, kiedy użytkownik kliknął przycisk "zamknij", jeśli (i tylko jeśli) aplikacja UWP działa na komputerze?

Odpowiedz

4

Od oficjalnej page o aplikacji cyklu:

Nie ma szczególne wydarzenie, aby wskazać, że użytkownik zamknął aplikację.

Zachowanie ograniczone przez użytkownika: jeśli aplikacja musi zrobić coś innego, gdy jest zamykana przez użytkownika, niż gdy jest zamknięta przez system Windows, można użyć procedury obsługi zdarzenia aktywacji, aby określić, czy aplikacja została zakończona przez użytkownik lub system Windows.

Więc zgodnie z tym jest nie (clear) sposobem, aby wiedzieć, jeśli użytkownik zamknął aplikację zanim aplikacja jest zamknięta, ale tylko po to wznowiona. Szkoda.

1

Usunąłem moją oryginalną odpowiedź ze zdarzeniem Window.Current.Closed, ponieważ wydaje się, że nie działa, jeśli masz tylko jedną instancję Window. Istnieje również CoreApplication.Exiting, ale sądząc po numerze this, to również nie działa. Wydaje się być znanym problemem, który może zostać naprawiony w przyszłości. Na koniec wydaje się, że nie ma jasnego sposobu na określenie, kiedy aplikacja się zamyka, tylko wtedy, gdy jest zawieszona.

Mimo to, Window.Current wywołuje zdarzenie VisibilityChanged po zamknięciu aplikacji. Problem polega na tym, że jest uruchamiany także, gdy aplikacja jest zminimalizowana, a może w niektórych innych przypadkach. Ale myślę, że w połączeniu z Suspending można (w mniejszym lub większym stopniu) bezpiecznie określić, że aplikacja komputerowa się zamyka. Dobrze, że VisibilityChanged wystrzelił przed Suspending i można zapisać jego wartość i sprawdzić go w obsłudze OnSuspending, po czym zdecydować, czy trzeba zrobić jakieś sprzątanie lub inne prace.

+0

Zdarzenie 'VisibilityChanged' zostanie uruchomione, gdy system operacyjny również zamknie aplikację. Tak więc nie ma różnicy między zamknięciem OS a zamykaniem użytkowników. – tomab

+0

Tak, system operacyjny może również zamknąć aplikację, ale robi to, gdy musi zwolnić zasoby, co może być rzadkim przypadkiem na komputerze. W każdym razie, jak wskazałem wcześniej - wydaje się, że nie ma jasnego sposobu na określenie, kiedy aplikacja jest zamykana przez użytkownika. –

+0

Więc możemy * zgadnąć * aplikacja została zamknięta, jeśli otrzymamy "VisibilityChanged", po którym nastąpi zdarzenie "Suspending". Czy to nie może wystąpić naturalnie, jeśli użytkownik zminimalizuje aplikację, a później Windows zdecyduje się zawiesić naszą aplikację? Wtedy niepoprawnie * odgadlibyśmy * aplikacja się zamyka, jako że użytkownik może później ją zmaksymalizować i wznowić? – Felix

Powiązane problemy