首页 > 解决方案 > 为什么在 Threading.Timer 中使用 Icon.FromHandle 设置 NotifyIcon.Icon 会导致内存泄漏?

问题描述

我将导致内存泄漏的代码行限制为以下从原始 Windows 应用程序获得的无用代码。

我已经知道当回调(或滴答事件)中的变量未正确处理时定时器导致内存泄漏的一般问题,这就是为什么我将两个“使用”部分放在我的函数中。我仍然看不到我没有管理的东西。

我考虑过定时轰炸,但即使我将 1000 毫秒设置为间隔,内存仍然会增加,直到出现内存异常。

块引用

class Program
{
    private static bool locked {get; set; }

    static void Main(string[] args)
    {
        System.Threading.Timer timer_log = new System.Threading.Timer(t_callback, null, 0, 100);
        Application.Run();
    }

    private static void t_callback(Object state)
    {
        if (locked == false)
        {
            locked = true;
            Leak.SetIcon();
            locked = false;
        }

    }
}

static class Leak
{
    private static NotifyIcon notifyIcon = new NotifyIcon();

    static public void SetIcon()
    {
        using (Bitmap bitmapIcona = new Bitmap(Properties.Resources.LoggerServiceImg))
        {
            using (Graphics graphicsIcona = Graphics.FromImage(bitmapIcona))
            {
                notifyIcon.Icon = Icon.FromHandle(bitmapIcona.GetHicon());
            }
        }
    }
}

块引用

标签: c#memorymemory-leakstimerbitmap

解决方案


推荐阅读