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

时间:2012-02-24 00:19:07

标签: c# macos mono bitmap

当尝试使用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”挂起所以我知道如何避免它?是否有单声道编码设置文件或可能有垃圾箱的东西?

2 个答案:

答案 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上首次启动,进行字体缓存等等。