Czy istnieje prosty sposób na przechwycenie zdarzenia wywołanego zmianą rozdzielczości ekranu globalnego?Wykrywanie zmiany rozdzielczości C# WinForms
Odpowiedz
obchodzić następujące zdarzenie:
Microsoft.Win32.SystemEvents.DisplaySettingsChanged
może odnosić się do this stronie więcej szczegółów.
Możesz również zobaczyć msdn article w klasie SystemEvents.
Dostępne są dwa zdarzenia - SystemEvents.DisplaySettingsChanged
i SystemEvents.DisplayedSettingsChanging
, z którymi można sobie poradzić. Należy pamiętać, że oba zdarzenia są statyczne i konieczne będzie odłączenie procedur obsługi przed wyjściem z programu.
Oczywiście nie musisz rezygnować z subskrypcji zdarzeń statycznych (lub innych zdarzeń), jeśli twój program (proces) umiera. OS zajmie się zwolnieniem całej pamięci twojego procesu do systemu operacyjnego. Jeśli jednak subskrybujesz statyczne zdarzenie lub jakiekolwiek zdarzenie wskazujące obiekt o dłuższym czasie życia niż subskrybowanie obiektu, a chcesz, aby ten obiekt kwalifikował się do GC, musisz anulować subskrypcję (- =) na zdarzenie.
I zawsze dobrą praktyką jest zawsze wypisywać się ze wszystkich wydarzeń. Nigdy nie wiesz, kiedy żywotność twoich obiektów zostanie zmieniona (przez kogoś innego) w trakcie cyklu życia twojego kodu źródłowego/produktu ...
- 1. Wykrywanie zmiany w UISwitchu
- 2. Wykrywanie zmiany stanu JRadioButton
- 3. Wykrywanie zmiany klasy bez setInterval
- 4. Wykrywanie jakiejkolwiek zmiany w localStorage?
- 5. Wykrywanie zmiany wyboru na UITextView?
- 6. C# WinForms ErrorProvider Control
- 7. C# Problem z WinForms Panel
- 8. Właściwości C# Winforms Message Box
- 9. WinForms C# DataGridView Wymuś odświeżenie
- 10. C# WinForms User/Permission management
- 11. C# WinForms - farba pytania metoda
- 12. combobox wartość domyślna winforms C#
- 13. Wykrywanie zmiany atrybutu wartości atrybutu, który utworzyłem
- 14. Wykrywanie zmiany kąta i odnośniki do listy
- 15. Wykrywanie zmiany adresu IP w systemie Linux
- 16. Wykrywanie zmiany w tekście w UITextfield
- 17. Plik wsadowy do zmiany rozdzielczości ekranu w systemie Windows 7
- 18. Przeciążanie rozdzielczości
- 19. Wykrywanie spawdzonych procesów C#
- 20. Cel C: Wykrywanie poruszenia
- 21. Wykrywanie EOF w C
- 22. Podnoszenie niestandardowych zdarzeń w C# WinForms
- 23. Zaokrąglone krawędzie w przycisk C# (WinForms)
- 24. C# WinForms niestandardowe właściwości sterowania niestandardowego
- 25. WinForms | C# | Autouzupełnianie w środku pola tekstowego?
- 26. Jak odświeżyć DataSource ListBox w C# WinForms
- 27. C# obrazy w wysokiej rozdzielczości w PDF
- 28. Zegar wysokiej rozdzielczości z C++ i Linux?
- 29. WinForms: Alternatywa dla SplitContainer?
- 30. Bit zmiany w C++
"zanim wyjdziesz ze swojego programu, musisz odłączyć swoje ładowarki": oczywiście, że nie! Gdy proces się zatrzyma, nie ma znaczenia, czy anulujesz subskrypcję czy nie ... Po prostu obiekty subskrybowane przez to wydarzenie nie będą kwalifikowały się do GC i pozostaną w pamięci –
Musisz odłączyć swoje procedury obsługi przed obiektem obsługi będzie GCed. Jeśli proces zakończy się, nie ma znaczenia. Jeśli Twoja aplikacja będzie nadal działać po tym, jak przestaniesz dbać o zmiany w wyświetleniach, w tym momencie zrezygnuj z subskrypcji, aby GC działał poprawnie. – user169771
Dokumentacja mówi: "Ponieważ jest to zdarzenie statyczne, musisz odłączyć procedury obsługi zdarzeń, gdy aplikacja zostanie usunięta, lub nastąpi wyciek pamięci.". https://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.displaysettingschanged.aspx?f=255&MSPPError=-2147217396 – CLS