2010-03-01 15 views
5

En una máquina Windows XP, el siguiente código es lanzar una System.ComponentModel.Win32Exception con el mensaje "La operación se completó correctamente"System.Drawing.Icon constructor de lanzar la "Operación completada con éxito" excepción

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

I puede detener el programa bloqueando con

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

pero, por supuesto, el icono no está configurado.

La traza completa es

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" 

esa línea 50 es la línea original que he publicado.

Esta es una aplicación WPF, y en una máquina con Windows 7 el código funciona bien.

EDITAR: Resultó que el ícono no funcionaba en Windows XP en absoluto, y agregó que las versiones de 256 colores parecen haberlo solucionado.

Respuesta

1

Resultó que el icono no funcionaba en Windows XP en absoluto, y agregó que 256 versiones de color parecen haberlo solucionado.

1

Por lo que parece, el problema parece ser un problema con no deshacerse de los objetos correctamente. Es difícil determinar exactamente dónde se produce el problema en su caso, pero como regla general, asegúrese de implementar la directiva using al tratar con objetos que implementen IDisposable.

Incluso en la muestra que nos ha proporcionado oportunidad de hacer algo como:

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

tener una lectura de esta article.

+0

Este no fue el problema, el icono simplemente se rompió, ¡pero esto seguramente nos ahorrará un dolor de cabeza más tarde! – jonnystoten

1

¿El archivo icon1.ico existe en el mismo directorio que el ejecutable de .NET? No dijiste explícitamente ... ¿estás leyendo esto como un archivo de ícono externo? Tal vez esto

 
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! 
} 

Espero que esto ayude, Saludos cordiales, Tom .

0

Tuve un problema similar. en mi caso, el archivo de íconos era un archivo de múltiples componentes que contenía iconos de tamaño 32x32, 48x48 y 256x256. Lo cambié a un tamaño de archivo de icono único 32x32 y funcionó bien después de eso.

Cuestiones relacionadas