C # Mono {new Bitmap ("fileName");} Просто висит на OSX - PullRequest
7 голосов
/ 24 февраля 2012

При попытке загрузить «.bmp», «.png» или «.jpg» в OSX 10.7.3 с использованием моно-версии объекта System.Drawing.Bitmap приложения просто зависают. Я не получаю ошибки, приложение просто застревает в конструкторе 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 ]

5 голосов
/ 18 марта 2013

Проблема только в производительности. Это не имеет ничего общего с вашим кодом; изображение просто загружается дольше.
Реализация System.Drawing в Mono - это просто оболочка на C #, она является неполной и не обеспечивает (или неправильно) всех функций в System.Drawing. Он может хорошо работать в Windows, потому что он использует собственный GDIPlus.dll, но может не работать хорошо в системах на основе Unix, потому что он использует механизм Cairo. Вы можете найти больше информации здесь .

1 голос
/ 02 сентября 2014

Возникла та же проблема с новой Mono 3.8, установленной на 10.10; но это ушло, подозрительно после того, как я сломался во время зависания, увидев нить # 4 в GdiplusStartup ().

Может быть, это связано с перерывом, или, может быть, GdiplusStartup просто занимает много времени при первом запуске в OS X, делает кэширование шрифтов или что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...