Обнаружить изменение разрешения c # WinForms

18

есть ли простой способ подключиться к событию, которое запускается при изменении глобального разрешения экрана?

    
задан Matze 14.01.2009 в 10:03
источник

3 ответа

30

Обратите внимание на следующее событие:

Microsoft.Win32.SystemEvents.DisplaySettingsChanged

Для более подробной информации вы можете обратиться к этой странице .

Вы также можете увидеть статью msdn о классе SystemEvents.     

ответ дан Frederick The Fool 14.01.2009 в 10:17
источник
6

Есть два события - SystemEvents.DisplaySettingsChanged и SystemEvents.DisplayedSettingsChanging , которые вы можете обрабатывать. Обратите внимание, что оба события являются статическими, и вам нужно будет отключить обработчики перед выходом из вашей программы.

    
ответ дан Radoslav Hristov 14.01.2009 в 10:23
источник
  • «вам нужно будет отделить ваших обработчиков перед выходом из вашей программы»: конечно же нет! Как только процесс остановится, не имеет значения, если вы отменили подписку или нет ... Просто объекты, которые подписаны на это событие, не будут иметь права на GC и останутся в памяти –  Thomas Levesque 11.05.2011 в 10:33
  • Вам нужно отделить обработчики до того, как объект обработчика будет GCed. Если процесс выходит, не имеет значения. Если ваше приложение продолжает работать после того, как вы перестали заботиться об изменениях в дисплее, вы должны отказаться от подписки в этот момент, чтобы GC работал правильно. –  user169771 07.04.2016 в 17:16
  • Документация гласит: «Поскольку это статическое событие, вы должны отключить обработчики событий, когда ваше приложение будет утилизировано, или произойдет утечка памяти». msdn.microsoft.com/en-us/library/... –  CLS 08.12.2016 в 10:00
4

Уверен, что вам не нужно отказаться от подписки на статические события (или любые события), если ваша программа (процесс) умирает. ОС позаботится о том, чтобы освободить всю память вашего процесса в ОС. Однако, если вы подписаны на статическое событие или какое-либо событие, указывающее на объект с более длительным сроком службы, чем ваш подписчик на объект, и вы хотите, чтобы этот объект имел право на GC - вам нужно отказаться от подписки (- =) на событие.

И всегда полезно всегда отказаться от подписки на все события. Вы никогда не знаете, когда срок жизни ваших объектов изменяется (кем-то другим) в течение срока службы вашего исходного кода / продукта ...

    
ответ дан Jan Romell 02.09.2011 в 09:16
источник