2012-02-24 2 views
7

Quando si tenta di caricare un ".bmp", ".png" o ".jpg" su OSX 10.7.3 usando la versione mono del Sistema Oggetto .Drawing.Bitmap le applicazioni si blocca. Non ho alcun errore, l'app è semplicemente bloccata sul costruttore di Bitmap ...C# Mono {new Bitmap ("fileName");} Si blocca solo su OSX

Quando eseguo lo stesso codice su (Arch) Linux o Windows, tutto funziona correttamente.

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

    } 

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

Se mi fermo l'applicazione in modalità di debug si apre la finestra "smontaggio" e mostra la sua bloccato su questa linea:

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

NOTA: dopo una pausa l'applicazione in modalità di debug un paio di volte "Magicamente" ha iniziato a lavorare mentre scrivevo questo. Ho promesso di non aver cambiato alcun codice. Qualcuno sa cosa può causare "System.Drawing.GDIPlus" da appendere quindi so come evitarlo ?? Esiste un file di impostazione del codex mono o qualcosa che potrebbe essere incasinato?

+0

fa questo lavoro meglio: var bitmap = Bitmap.FromFile ("......../image.bmp") – PhonicUK

+0

senso il tempo del post, ho spostato verso utilizzando le API native di (via MonoMac) di OSX per il caricamento delle immagini ... Sembra correre più veloce anche in questo modo. – zezba9000

risposta

5

Il problema è solo prestazioni. Non ha nulla a che fare con il tuo codice; l'immagine richiede più tempo per essere caricata.
L'implementazione di Mono di System.Drawing è solo un wrapper C# ed è un po 'incompleta e non fornisce (o non correttamente) tutte le funzionalità in System.Drawing. Può funzionare bene in Windows perché usa il nativo GDIPlus.dll ma potrebbe non funzionare bene nei sistemi basati su Unix poiché utilizza il motore Cairo. È possibile trovare ulteriori informazioni here.

+0

Mi sono appena spostato per utilizzare l'API nativa tramite MonoMac. Quindi non più problemi di prestazioni in questo modo. – zezba9000

+0

La soluzione di user2057660 ha superato questo per me, il che è molto strano e, a parte il consumo apparente della CPU, sembra in conflitto con la prospettiva che questo sia legato alle prestazioni. Sembra che appenda perennemente pure. –

1

Avere lo stesso problema con una nuova installazione di Mono 3.8 su 10.10; ma è andato via, sospettosamente dopo che mi sono rotto durante l'impiccagione, vedendo il thread n. 4 in GdiplusStartup().

Forse è correlato alla rottura, o forse GdiplusStartup richiede solo molto tempo al primo avvio su OS X, facendo caching del font o qualcosa del genere.

+0

Questa soluzione ha avuto successo per me. Durante il blocco, mono-sgen utilizzava il 99% della CPU. È super strano che funzioni. –

+1

Concludo ufficialmente con il termine "Hang di Schrodinger" per descrivere la natura di questo bug. –