Я пытаюсь разработать приложение Windows Mobile 6 (в WF/С#). Существует только одна форма, и на форме есть только объект PictureBox. На этом я рисую все необходимые элементы управления или что угодно.
Есть две вещи, которые я делаю. Рисование пользовательских форм и загрузка растровых изображений из .png файлов.
Следующая строка блокирует файл при загрузке (что является нежелательным сценарием):
Bitmap bmp = new Bitmap("file.png");
Поэтому я использую другой способ загрузки растрового изображения.
public static Bitmap LoadBitmap(string path) {
using (Bitmap original = new Bitmap(path))
{
return new Bitmap(original);
}
}
Это, я думаю, намного медленнее, но я не знаю лучшего способа загрузить изображение, быстро освобождая блокировку файла.
Теперь при рисовании изображения есть метод, который я использую:
public void Draw() {
Bitmap bmp = new Bitmap(240,320);
Graphics g = Graphics.FromImage(bmp);
// draw something with Graphics here.
g.Clear(Color.Black);
g.DrawImage(Images.CloseIcon, 16, 48);
g.DrawImage(Images.RefreshIcon, 46, 48);
g.FillRectangle(new SolidBrush(Color.Black), 0, 100, 240, 103);
pictureBox.Image = bmp;
}
Это, похоже, как бы утечка памяти. И если я продолжаю делать это слишком долго, приложение в конечном итоге сбой.
Поэтому у меня есть 3 вопроса:
1.) Каков лучший способ загрузки растровых изображений из файлов без блокировки файла?
2.) Какие объекты необходимо вручную расположить в функции Draw() (и в каком порядке), чтобы не было утечки памяти и не выбрано ObjectDisposedException?
3.) Если для параметра pictureBox.Image установлено значение bmp, как в последней строке кода, будет отображаться pictureBox.Image.Dispose() только ресурсы, связанные с сохранением pictureBox.Image или базовый битмап установлен на него?