System.Drawing.Icon构造函数抛出“操作成功完成”exception

在Windows XP计算机上,以下代码抛出System.ComponentModel.Win32Exception,并显示消息“操作已成功完成”

System.Drawing.Icon icon = new System.Drawing.Icon("icon.ico"); 

我可以阻止程序崩溃

 try { System.Drawing.Icon icon = new System.Drawing.Icon("icon.ico"); } catch(System.ComponentModel.Win32Exception ex) { if (ex.NativeErrorCode != 0) { throw; } } 

但当然没有设置图标。

完整的堆栈跟踪是

 at System.Drawing.Icon.Initialize(Int32 width, Int32 height) at System.Drawing.Icon..ctor(String fileName, Int32 width, Int32 height) at System.Drawing.Icon..ctor(String fileName) at hermes.Window1..ctor() in D:\\projects\\hermesclient\\hermesWPF\\hermes\\Window1.xaml.cs:line 50" 

第50行是我发布的原始行。

这是一个WPF应用程序,在Windows 7机器上,代码工作正常。

编辑:原来这个图标在Windows XP中根本不起作用,添加256色版本似乎已经修复了它。

从它的外观来看,问题似乎是没有正确处理对象的问题。 很难准确指出您的案例中出现问题的位置,但作为一般经验法则,确保在处理实现IDisposable对象时实现using指令。

即使在您提供的示例中也尝试执行以下操作:

 using (var icon = new System.Drawing.Icon("icon.ico")) { // use icon } // icon is then disposed. 

阅读本文 。

文件icon1.ico是否与.NET可执行文件存在于同一目录中? 您没有明确说明……您是否将此作为外部图标文件阅读? 或许这个

 string sPath2Icon = Path.Combine(Environment.CurrentDirectory,“icon1.ico”);
 using(System.Drawing.Icon icon = new System.Drawing.Icon(sPath2Icon)){
     //做与图标有关的事情!
 }

希望这会有所帮助,最好的问候,汤姆。

原来这个图标在Windows XP中根本不起作用,添加256色的版本似乎已经修复了它。

我有类似的问题。 在我的例子中,图标文件是一个包含32×32,48×48和256×256大小图标的multiicon文件。 我将其更改为单个图标文件大小32×32,之后它工作正常。