当尝试使用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”挂起所以我知道如何避免它?是否有单声道编码设置文件或可能有垃圾箱的东西?
答案 0 :(得分:5)
问题在于表现。它与你的代码无关;图像只需要更长的时间来加载。
Mono的System.Drawing
实现只是一个C#包装器,有点不完整,没有(或不正确)提供System.Drawing
中的所有功能。它可能在Windows中运行良好,因为它使用本机GDIPlus.dll
,但在基于unix的系统中可能无法正常运行,因为它使用Cairo
引擎。您可以找到更多信息here。
答案 1 :(得分:1)
在10.10上安装新的Mono 3.8会遇到同样的问题;但是,在我在悬挂期间断了,看到GdiplusStartup()中的第4号线时,它很可疑地消失了。
也许它与休息有关,或者GdiplusStartup可能需要花费很长时间才能在OS X上首次启动,进行字体缓存等等。