Удалите шаблон для класса с методами stati c, используя SystemEvents в элементе управления WinForms - PullRequest
0 голосов
/ 10 января 2020

У меня есть элемент управления 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?

...