У меня есть элемент управления WinForms, в котором некоторые элементы пользовательского интерфейса рисуются с помощью методов stati c внутреннего класса - примерно так:
internal class DrawUIElement
{
public static void DrawArrow(Graphics g, Rectangle rect)
{
// Drawing something on the Graphics g
}
}
Теперь мне нужно изменить этот класс для поддержки Res экраны. Улучшенная версия класса будет рисовать элементы пользовательского интерфейса в зависимости от разрешения экрана. Это подразумевает, что мне нужно сделать некоторые расчеты на основе текущего DPI экрана и пересчитать их при изменении DPI. Я намерен использовать для этого событие SystemEvents.DisplaySettingsChanged . Я собираюсь добавить обработчик событий в конструктор класса DrawUIElement и выполнить все необходимые перерасчеты, когда DPI изменяется в обработчике событий:
static DrawUIElement()
{
Microsoft.Win32.SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;
}
private static void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
{
// Recalculate internal parameters based on the new screen DPI
}
Этот элемент управления WinForms уже создает экземпляры некоторых классов, использующих аналогичные SystemEvents.UserPreferenceChanged событие. Эти классы реализуют метод Dispose()
из шаблона IDisposable
для освобождения ссылок на обработчик событий SystemEvents_UserPreferenceChanged, чтобы избежать утечки ресурсов при закрытии формы с элементом управления.
Вопрос в том, нужно ли мне также добавить метод Dispose()
в мой класс DrawUIElements, который отсоединит мой обработчик события SystemEvents_DisplaySettingsChanged от SystemEvents.DisplaySettingsChanged, чтобы избежать утечки ресурсов, или нет необходимости беспокоиться об этом в классе, содержащем только методы stati c?