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"

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

这是一个 WPF 应用程序,在 Windows 7 机器上代码运行良好。

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

4

4 回答 4

1

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

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

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

阅读这篇文章

于 2010-03-01T15:12:28.580 回答
1

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

于 2011-07-28T21:17:52.567 回答
1

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

string sPath2Icon = Path.Combine(Environment.CurrentDirectory, "icon1.ico");
使用 (System.Drawing.Icon 图标 = 新 System.Drawing.Icon(sPath2Icon)){
    // 做你必须做的事情!
}

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

于 2010-03-01T15:40:01.473 回答
1

我有一个类似的问题。在我的例子中,图标文件是一个包含 32x32、48x48 和 256x256 大小图标的多图标文件。我将其更改为 32x32 大小的单个图标文件,之后它运行良好。

于 2011-04-03T11:33:35.803 回答