Kilka wyjaśnień: dla projektu, nad którym pracuję, muszę napisać program działający w tle, wykrywa zmiany w plików i przesyła zmodyfikowane pliki do usługi internetowej, aby udostępnić je innym. Całkiem prosta synchronizacja, gdyby nie przypadek, w którym użytkownik modyfikuje duży plik i decyduje się na zamknięcie swojego komputera zaraz po edycji.C# - Jak wykryć zamknięcie/wylogowanie systemu Windows i anulować to działanie (po zapytaniu użytkownika)
Mogę anulować przesyłanie i czekać na kolejny restart, aby przesłać, ale mogę sobie wyobrazić, że użytkownik pobiera plik z internetu na inny komputer następnego ranka i nie rozumie, dlaczego jego zmiany z ubiegłej nocy tam jest.
Więc moim pomysłem było wykrycie, kiedy użytkownicy wylogowują się lub restartują system Windows, a jeśli jestem w trakcie przesyłania, po prostu pytam użytkownika "Wciąż synchronizujemy plik Foo.txt
, który właśnie zmieniliście. na pewno chcesz zrestartować? Zmiany nie będą dostępne dla innych, dopóki nie uruchomisz ponownie swojego komputera! ". Jeśli użytkownicy powiedzą "nie", będę musiał zrezygnować z ponownego uruchomienia/wylogowania
Czy to możliwe?
OK, tak myślałem ... Pozwolę wtedy odejść z tego zachowania. Inną moją ideą jest nieustanne przesyłanie postępu w półprzezroczystym oknie. Użytkownicy są następnie informowani o pracy, która dzieje się za sceną i prawdopodobnie nie zostaną w tym przypadku zamknięte. –
@Sebastien szczerze mówiąc, chciałbym spojrzeć na wykonanie usługi, jak Hans zasugerował. Spraw, aby przesyłanie było niezawodne, aby można je było wznowić, i zawijać je w usługę, aby użytkownik nie musiał ponownie uruchamiać go ręcznie. –
To mniej więcej zachowanie, które zamierzałem przyjąć, kiedy powiedziałem: "Puszczę to zachowanie". Chciałem tylko dodać dyskretny postęp przesyłania, aby poinformować użytkownika. Możliwe, że nie będzie to konieczne, jeśli zostaną podane życiorysy. Sądzę, że jestem trochę zaniepokojony pomysłem, że użytkownik wraca do domu ze swoim laptopem i plikami, których kopia zapasowa nie ma w systemie ... –