diff --git a/Utilities/EmbeddedResources.cs b/Utilities/EmbeddedResources.cs index 5908cd8..cff974b 100644 --- a/Utilities/EmbeddedResources.cs +++ b/Utilities/EmbeddedResources.cs @@ -38,6 +38,7 @@ using System; using System.Collections.Generic; using System.Drawing; +using System.IO; using System.Reflection; namespace OpenHardwareMonitor.Utilities { @@ -49,10 +50,23 @@ namespace OpenHardwareMonitor.Utilities { string[] names = Assembly.GetExecutingAssembly().GetManifestResourceNames(); for (int i = 0; i < names.Length; i++) { - if (names[i].Replace('\\', '.') == name) - return new Bitmap(Assembly.GetExecutingAssembly(). - GetManifestResourceStream(names[i])); - } + if (names[i].Replace('\\', '.') == name) { + using (Stream stream = Assembly.GetExecutingAssembly(). + GetManifestResourceStream(names[i])) { + + // "You must keep the stream open for the lifetime of the Image." + Image image = Image.FromStream(stream); + + // so we just create a copy of the image + Bitmap bitmap = new Bitmap(image); + + // and dispose it right here + image.Dispose(); + + return bitmap; + } + } + } return new Bitmap(1, 1); } @@ -63,10 +77,13 @@ namespace OpenHardwareMonitor.Utilities { string[] names = Assembly.GetExecutingAssembly().GetManifestResourceNames(); for (int i = 0; i < names.Length; i++) { - if (names[i].Replace('\\', '.') == name) - return new Icon(Assembly.GetExecutingAssembly(). - GetManifestResourceStream(names[i])); - } + if (names[i].Replace('\\', '.') == name) { + using (Stream stream = Assembly.GetExecutingAssembly(). + GetManifestResourceStream(names[i])) { + return new Icon(stream); + } + } + } return null; }