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

5
在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"

那行代码是我发布的原始代码。

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

编辑:事实证明图标在Windows XP中根本无法工作,添加256色版本似乎已经解决了问题。

4个回答

1
从外观上看,问题似乎是由于未正确处理对象而引起的。很难准确地确定在您的情况下问题出现在哪里,但一般来说,请确保在处理实现了IDisposable接口的对象时实现using指令。

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

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

看看这篇文章


这不是问题,图标只是损坏了,但这几乎肯定会在以后为我们省去麻烦! - jonnystoten

1

我曾经遇到过类似的问题。我的情况是图标文件是一个多图标文件,包含32x32、48x48和256x256大小的图标。我将其更改为单个32x32大小的图标文件后,问题得到了解决。


1

文件icon1.ico是否存在于与.NET可执行文件相同的目录中?你并没有明确说明...你是作为外部图标文件来读取的吗?也许是这样:

string sPath2Icon = Path.Combine(Environment.CurrentDirectory, "icon1.ico");
using (System.Drawing.Icon icon = new System.Drawing.Icon(sPath2Icon)){
    // 对图标进行必要操作!
}

希望这有所帮助, 此致, Tom。


1

结果发现在Windows XP中图标根本不起作用,添加256色版本似乎解决了这个问题。


很遗憾,这对我来说并不是一个解决方案。在Windows 7和Windows 10中都存在相同的问题。添加256色的图像没有任何帮助。 - Nicke Manarin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接