为什么在Threading.Timer中使用Icon.FromHandle设置NotifyIcon.Icon会导致内存泄漏?

问题描述

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

我已经知道计时器的一般问题,当未正确处理回调(或tick事件)中的变量时,计时器会导致内存泄漏,这就是为什么我将两个“ using”部分放在函数中。仍然看不到我无法管理的内容

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

Blockquote

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,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());
            }
        }
    }
}

Blockquote

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)