C# 我来自添加资源。返回一个Icon类型的对象,可以直接使用。
Matthew Scharley发布的代码存在内存泄漏:C# 我来自添加资源。返回一个Icon类型的对象,可以直接使用。,c#,visual-studio,resources,icons,C#,Visual Studio,Resources,Icons,Matthew Scharley发布的代码存在内存泄漏: paused = !paused; if (paused) notifyIcon.Icon = Properties.Resources.RedIcon; else notifyIcon.Icon = Properties.Resources.GreenIcon; 在替换它之前,您应该Dispose()notifyIcon.Icon,因为Properties.Resources.SOME\u Icon每次使用时都会创建一
paused = !paused;
if (paused)
notifyIcon.Icon = Properties.Resources.RedIcon;
else
notifyIcon.Icon = Properties.Resources.GreenIcon;
在替换它之前,您应该Dispose()
notifyIcon.Icon,因为Properties.Resources.SOME\u Icon
每次使用时都会创建一个新的图标。
这可以在日志中观察到,代码如下:
Console.WriteLine(Properties.Resources.RedIcon.GetHashCode());
Console.WriteLine(Properties.Resources.RedIcon.GetHashCode());
Console.WriteLine(Properties.Resources.RedIcon.GetHashCode());
您将在日志中看到3个不同的哈希代码。这意味着这些是不同的对象
因此,简单的解决方案是:
paused = !paused;
notifyIcon.Icon?.Dispose();
notifyIcon.Icon = paused
? Properties.Resources.RedIcon;
: Properties.Resources.GreenIcon;
Matthew Scharley发布的代码存在内存泄漏:
paused = !paused;
if (paused)
notifyIcon.Icon = Properties.Resources.RedIcon;
else
notifyIcon.Icon = Properties.Resources.GreenIcon;
在替换它之前,您应该Dispose()
notifyIcon.Icon,因为Properties.Resources.SOME\u Icon
每次使用时都会创建一个新的图标。
这可以在日志中观察到,代码如下:
Console.WriteLine(Properties.Resources.RedIcon.GetHashCode());
Console.WriteLine(Properties.Resources.RedIcon.GetHashCode());
Console.WriteLine(Properties.Resources.RedIcon.GetHashCode());
您将在日志中看到3个不同的哈希代码。这意味着这些是不同的对象
因此,简单的解决方案是:
paused = !paused;
notifyIcon.Icon?.Dispose();
notifyIcon.Icon = paused
? Properties.Resources.RedIcon;
: Properties.Resources.GreenIcon;
谢谢你,我也在找同样的东西。有没有办法将.ico文件嵌入到可执行文件中,这样它们就不会显示为单独的文件?我希望我的问题有意义。问候,@Andrei:这正是资源的含义。一旦添加,它将作为已编译exe的一部分嵌入。“…大多数问题已经过了这一阶段”-太正确了…感谢您将其组合在一起!最后,我知道这很简单。顺便说一句,资源文件在编译时被锁定。因此,在运行时动态更改它们对更改现有值几乎没有影响。如果希望在运行时更改值,请使用配置文件。如果这对任何人都有帮助。在VB.NET中,资源是通过“My.resources.GreenIcon”访问的。感谢您的帮助,我们正在寻找完全相同的东西。有没有办法将.ico文件嵌入到可执行文件中,这样它们就不会显示为单独的文件?我希望我的问题有意义。问候,@Andrei:这正是资源的含义。一旦添加,它将作为已编译exe的一部分嵌入。“…大多数问题已经过了这一阶段”-太正确了…感谢您将其组合在一起!最后,我知道这很简单。顺便说一句,资源文件在编译时被锁定。因此,在运行时动态更改它们对更改现有值几乎没有影响。如果希望在运行时更改值,请使用配置文件。如果这对任何人都有帮助。在VB.NET中,可以通过“My.resources.GreenIcon”访问资源