我有一个 WinForms 控件,其中一些 UI 元素是使用内部类的静态方法绘制的 - 如下所示:
internal class DrawUIElement
{
public static void DrawArrow(Graphics g, Rectangle rect)
{
// Drawing something on the Graphics g
}
}
现在我需要修改这个类来支持高分辨率屏幕。该类的改进版本将根据屏幕分辨率绘制 UI 元素。这意味着我需要根据屏幕的当前 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 分离以避免资源泄漏,或者在仅包含静态方法的类中无需担心这一点?