C#Mono {new Bitmap(“fileName”);}只是挂在OSX上

当尝试使用mono的版本的System.Drawing.Bitmap对象在OSX 10.7.3上加载“.bmp”,“。png”或“.jpg”时,应用程序只会挂起。 我没有得到任何错误,应用程序只是卡在Bitmaps构造函数上…

当我在(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) 

注意:在调试模式下暂停应用程序几次后,它“神奇地”开始工作。 我承诺我没有更改任何代码。 谁知道什么可以导致“System.Drawing.GDIPlus”挂起所以我知道如何避免它? 是否有单声道的codex设置文件或可能有垃圾箱的东西?

问题只是表现。 它与你的代码无关; 图像只需要更长的时间来加载。
Mono的System.Drawing实现只是一个C#包装器,有点不完整,并且没有(或错误地)提供System.Drawing所有function。 它可能在Windows中运行良好,因为它使用原生GDIPlus.dll但在基于unix的系统中可能无法正常运行,因为它使用的是Cairo引擎。 您可以在此处找到更多信息。

在10.10上安装新的Mono 3.8会遇到同样的问题; 但是,在我悬挂期间,我在GdiplusStartup()中看到第4号线程时,它很可疑地消失了。

也许它与rest有关,或者GdiplusStartup可能需要花费很长时间才能在OS X上首次启动,进行字体缓存等等。