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

时间:2010-03-01 14:51:00

标签: c# .net exception icons system.drawing

在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色的版本似乎已经修复了它。

4 个答案:

答案 0 :(得分:1)

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

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

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

阅读此article

答案 1 :(得分:1)

文件icon1.ico是否与.NET可执行文件存在于同一目录中?你没有明确说明......你是在读这个外部图标文件吗?也许这个

string sPath2Icon = Path.Combine(Environment.CurrentDirectory, "icon1.ico");
using (System.Drawing.Icon icon = new System.Drawing.Icon(sPath2Icon)){
    // Do what you have to do with icon!
}

希望这有帮助, 最好的祝福, 汤姆。

答案 2 :(得分:1)

原来这个图标根本没有在Windows XP中运行,添加256色的版本似乎已经修复了它。

答案 3 :(得分:0)

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