Это тип делегата для события SystemEvents.UserPreferenceChanged. Это событие возникает, когда Windows передает сообщение WM_SETTINGCHANGE. Что обычно происходит, когда пользователь использует апплет панели управления и меняет настройки системы.
Несколько элементов управления регистрируют обработчик события для этого события, DataGridView, DateTimePicker, MonthCalendar, ProgressBar, PropertyGrid, RichTextBox, ToolStrip, NumericUpDown. Обычно их интересуют изменения шрифта или метки, а также все, что может повлиять на макет.
SystemEvents.UserPreferenceChanged - статическое событие. Если зарегистрировать обработчик и забыть отменить его регистрацию, это приведет к утечке памяти и предотвратит сбор мусора для элемента управления. Перечисленные элементы управления гарантируют, что этого не произойдет, они отменяют регистрацию обработчика событий в методе OnHandleDestroyed () или Dispose ().
У вас будут проблемы, когда ни один из этих двух методов не будет запущен. Это произойдет, когда вы удалите элемент управления из коллекции Controls контейнера и забудете его удалить (). Хотя забывание вызова Dispose () обычно не является проблемой, это жесткое требование для элементов управления. Это тоже легко забыть, элементы управления обычно автоматически распределяются по форме. Но это происходит только для элементов управления в коллекции элементов управления.
Также обязательно вызовите Dispose () в формах, отображаемых с помощью метода ShowDialog (), после получения результатов диалога. Использование оператора - лучший способ справиться с этим.
Еще одна мучительная деталь важна для события UserPreferenceChanged, часто оно блокирует ваше приложение, когда вы создаете элементы управления в рабочем потоке. Обычно, когда рабочая станция заблокирована (нажмите Win + L). Который не может быть хорошим концом, когда вы используете элементы управления, которые я перечислил, класс SystemEvents пытается вызвать событие в потоке пользовательского интерфейса, но, конечно, не может сделать это правильно, когда их создал более одного потока.
Также вид ошибки, которая может иметь длительный эффект, например, заставка может заставить класс SystemEvents неверно угадать, какой поток является вашим потоком пользовательского интерфейса. После чего он затем постоянно вызывает событие в неправильном потоке. Очень некрасиво для диагностики , тупик хорошо скрыт.