2012-02-24 62 views
7

當試圖在OSX 10.7.3上使用單聲道系統版本的系統加載「.bmp」,「.png」或「.jpg」 .Drawing.Bitmap對象的應用程序只是掛起。我得到沒有錯誤,應用程序只是卡在位圖構造...C#Mono {new Bitmap(「fileName」);}只是掛在OSX上

當我在(Arch)Linux或Windows上運行相同的代碼一切正常。

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

    } 

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

如果我暫停在調試模式下的應用中打開「反彙編」窗口,並顯示其粘在這條線:

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

注意:在調試模式下暫停申請了幾次後,它在寫這篇文章的時候「神奇地」開始工作。我promis我沒有改變任何代碼。任何人都知道什麼會導致「System.Drawing.GDIPlus」掛起,所以我知道如何避免它?有沒有一個單聲道的codex設置文件或者可能會有bin亂碼的東西?

+0

做這項工作更好: VAR位= Bitmap.FromFile(「......../image.bmp」) – PhonicUK 2012-08-08 13:37:20

+0

感後的時間,我已經搬了使用本機API的(通過MonoMac)的OSX加載圖像......似乎也運行得更快。 – zezba9000 2012-08-08 21:27:19

回答

5

問題只是表現。它與你的代碼無關;圖像只需要較長的時間加載。
Mono對System.Drawing的實現只是一個C#封裝,並且有點不完整,並且沒有(或不正確)提供System.Drawing中的所有功能。它可能在Windows中運行良好,因爲它使用本機GDIPlus.dll,但在基於Unix的系統中可能無法正常運行,因爲它使用Cairo引擎。你可以找到更多的信息here

+0

雅剛剛我轉移到通過MonoMac使用本地API。所以沒有更多的性能問題。 – zezba9000 2013-03-22 17:54:30

+0

user2057660的解決方法對我來說已經超越了這一點,這非常奇怪,除了顯而易見的CPU消耗之外,似乎與性能相關的前景相沖突。它似乎也永遠掛起,以及。 – 2014-10-17 14:44:23

1

在10.10上使用新的Mono 3.8安裝時出現同樣的問題;但是在懸掛期間,我斷斷續續地看到GdiplusStartup()中的線程#4,但它消失了。

也許它與中斷有關,或者也許GdiplusStartup在OS X上首次啓動需要很長時間,字體緩存等等。

+0

此替代方法對我成功。在掛機期間,mono-sgen使用99%的CPU。這很奇怪,這是有效的。 – 2014-10-17 14:42:33

+1

我正式創造術語「薛定諤的恆」來形容這個錯誤的本質。 – 2014-10-17 15:51:36

相關問題