Как часто сохранять изображение в файл в Windows Forms (C #)? - PullRequest
0 голосов
/ 11 января 2019

Я написал что-то в C # как

while(1){
  Bitmap b = BitMapFromSomewhereElse();
  b.save("a.jpg");
}

для обновления изображения в режиме реального времени. Но я всегда получаю System.Runtime.InteropServices.ExternalException: общая ошибка в GDI +

В чем здесь проблема? Может быть, я пишу слишком быстро, если я делаю этот цикл 500 мс за раз, ошибка появится через несколько секунд, и если я сделаю это 5000 мс за раз, ошибка не появится. Я искал и пробовал много методов, таких как вызов Dispose () или использование (b = ...) ... но ни один из них не сработал.

1 Ответ

0 голосов
/ 11 января 2019

Возможно, проблема в том, что вы не высвобождаете ресурсы. Bitmap это одноразовый предмет, поэтому вы должны его утилизировать:

while(1){
    using (Bitmap b = BitMapFromSomewhereElse()) {
        b.save("a.jpg");
    }
}

Это действительно зависит от того, создает ли BitMapFromSomewhereElse новое растровое изображение каждый раз, когда вы его вызываете, или оно просто возвращает ссылку на существующее растровое изображение. Если первое, то вам нужно позвонить Dispose. Если последнее, то Dispose не требуется, если все, что создает растровое изображение, вначале заканчивается его удалением в какой-то момент.

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