2016-01-28 63 views
9

Ứng dụng UWP chạy trên máy tính để bàn có thể được đóng từ nút X trên cùng nhưng không có bất kỳ sự kiện nào cho nó. Được biết, trên điện thoại và máy tính bảng, ứng dụng phải dựa trên sự kiện Suspending, bất kể nó được kích hoạt như thế nào và ứng dụng sẽ dựa trên ApplicationExecutionState.UWP trên máy tính để bàn đóng bởi nút X trên cùng - không có sự kiện

Tuy nhiên, đây là một trường hợp phổ biến (có thể): trên điện thoại Suspending sự kiện đủ và trong trường hợp cuộc gọi Voip đang diễn ra, hệ điều hành sẽ được vận hành sau khi ứng dụng bị tạm ngưng. Trên máy tính để bàn, nút đóng được người dùng mong đợi đóng hoàn toàn ứng dụng. Vì vậy, nếu một cuộc gọi đang diễn ra, nó sẽ bị treo cổ và một số tài nguyên nhất định sẽ được giải phóng.

Làm cách nào để biết khi nào người dùng nhấp vào nút "đóng" nếu (và chỉ khi) ứng dụng UWP đang chạy trên máy tính để bàn?

Trả lời

4

Từ chính thức page về vòng đời ứng dụng:

Không có sự kiện đặc biệt để chỉ ra rằng người dùng đóng ứng dụng.

Hành vi đóng của người dùng: Nếu ứng dụng của bạn cần thực hiện điều gì đó khác khi người dùng đóng cửa hơn khi được đóng bởi Windows, bạn có thể sử dụng trình xử lý sự kiện kích hoạt để xác định xem ứng dụng có bị chấm dứt bởi người dùng hoặc Windows.

Vì vậy, theo này có không (rõ ràng) cách nào để biết nếu người dùng đóng ứng dụng trước khi ứng dụng được đóng nhưng chỉ sau khi nó được khởi động lại. Quá tệ.

1

Tôi đã xóa câu trả lời ban đầu của mình với sự kiện Window.Current.Closed vì nó dường như không hoạt động nếu bạn chỉ có một phiên bản Window. Ngoài ra còn có CoreApplication.Exiting, nhưng đánh giá bởi this chủ đề nó cũng không hoạt động. Dường như được biết vấn đề có thể được khắc phục trong tương lai. Cuối cùng, có vẻ như không có cách nào rõ ràng để xác định thời điểm ứng dụng bị đóng, chỉ khi ứng dụng bị tạm ngưng.

Tuy nhiên, Window.Current không kích hoạt sự kiện VisibilityChanged khi ứng dụng bị đóng. Vấn đề là, nó cũng bị sa thải khi ứng dụng được giảm thiểu và có thể trong một số trường hợp khác. Nhưng tôi nghĩ rằng kết hợp với Suspending bạn có thể (nhiều hơn hoặc ít hơn) một cách an toàn xác định rằng ứng dụng máy tính để bàn đang đóng. Điều tốt là, VisibilityChanged bắn trước Suspending và bạn có thể lưu giá trị của nó và kiểm tra nó trong OnSuspending xử lý, sau đó quyết định nếu bạn cần phải làm bất kỳ làm sạch hoặc công việc khác.

+0

Nhưng sự kiện 'VisibilityChanged' sẽ được kích hoạt khi HĐH cũng đóng ứng dụng. Vì vậy, không có sự khác biệt giữa đóng cửa hệ điều hành và người dùng đóng. – tomab

+0

Có, HĐH cũng có thể đóng ứng dụng, nhưng nó thực hiện như vậy khi cần tài nguyên miễn phí, đây có thể là một trường hợp khá hiếm hoi trong máy tính để bàn. Dù sao, như tôi đã chỉ ra trước đây - nó xuất hiện không có cách rõ ràng để xác định khi ứng dụng được đóng bởi người dùng. –

+0

Vì vậy, chúng tôi có thể * đoán * ứng dụng đã bị đóng nếu chúng tôi nhận được 'VisibilityChanged' theo sau sự kiện 'Suspending'. Điều này có thể không xảy ra tự nhiên nếu người dùng giảm thiểu ứng dụng và sau đó Windows quyết định tạm ngưng ứng dụng của chúng tôi? Sau đó, chúng tôi sẽ không chính xác * đoán * ứng dụng đang đóng, khi người dùng sau đó có thể tối đa hóa và tiếp tục? – Felix

Các vấn đề liên quan