Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我来自添加资源。返回一个Icon类型的对象,可以直接使用。_C#_Visual Studio_Resources_Icons - Fatal编程技术网

C# 我来自添加资源。返回一个Icon类型的对象,可以直接使用。

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每次使用时都会创建一

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;

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”访问资源