2012-02-24 12 views
7

cuando intenta cargar un ".bmp", ".png" o ".jpg" en OSX 10.7.3 usando la versión mono del sistema .Drawing.Bitmap object las aplicaciones simplemente se cuelgan. No obtengo ningún error, la aplicación simplemente está atascada en el constructor de Bitmaps ...C# Mono {nuevo mapa de bits ("fileName");} simplemente cuelga en OSX

Cuando ejecuto el mismo código en (Arch) Linux o Windows todo funciona bien.

public static void Main (string[] args) 
{ 
    using (var bitmap = new Bitmap("/....../image.bmp")) 
    { 

    } 

    Console.WriteLine ("Hello World!");// Never gets here... 
} 

Si hago una pausa de la aplicación en modo de depuración se abre la ventana de "desmontaje" y muestra su pegada en esta línea:

call Status System.Drawing.GDIPlus:GdiplusStartup (UInt64, GdiplusStartupInput, GdiplusStartupOutput) 

NOTA: Después de una pausa de la aplicación en modo de depuración un par de veces "Mágicamente" comenzó a trabajar mientras escribía esto. Prometo que no cambié ningún código. ¿Alguien sabe qué puede causar "System.Drawing.GDIPlus" para colgar, así que sé cómo evitarlo? ¿Hay un archivo de configuración mono codex o algo que podría haber arruinado?

+0

funciona esto mejor: var mapa de bits = Bitmap.FromFile ("......../imagen.bmp") Sentido – PhonicUK

+0

el momento de la entrada, que se han trasladado ya al uso de los nativos de la API (a través de MonoMac) de OSX para cargar imágenes ... Parece correr más rápido de esa manera también. – zezba9000

Respuesta

5

El problema es solo el rendimiento. No tiene nada que ver con tu código; la imagen tarda más en cargarse.
La implementación de Mono de System.Drawing es simplemente un contenedor C# y está incompleto y no proporciona (o incorrectamente) todas las funciones en System.Drawing. Puede funcionar bien en Windows porque usa el GDIPlus.dll nativo pero puede no funcionar bien en sistemas basados ​​en Unix porque usa el motor Cairo. Puede encontrar más información here.

+0

Ya me acabo de mudar para usar la API nativa a través de MonoMac. Así que no hay más problemas de rendimiento de esa manera. – zezba9000

+0

La solución temporal de user2057660 superó esto para mí, lo cual es muy extraño y, aparte del aparente consumo de CPU, parece estar en conflicto con la perspectiva de que esto esté relacionado con el rendimiento. Parece colgar perpetuamente, también. –

1

Tiene el mismo problema con una nueva instalación Mono 3.8 en 10.10; pero desapareció, sospechosamente después de que me rompí durante el ahorcamiento, viendo el hilo # 4 en GdiplusStartup().

Tal vez está relacionado con el descanso, o tal vez GdiplusStartup solo lleva mucho tiempo desde el primer lanzamiento en OS X, haciendo caché de fuentes o algo así.

+0

Esta solución fue exitosa para mí. Durante el hang, mono-sgen estaba usando 99% de CPU. Es super extraño que esto funcione. –

+1

Estoy oficialmente acuñando el término "Schrodinger's Hang" para describir la naturaleza de este error. –

Cuestiones relacionadas