在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色的版本似乎已经修复了它。
答案 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,之后它工作正常。