Я пытаюсь разработать приложение для Windows Mobile 6 (в WF / C #). Существует только одна форма, и на форме есть только объект 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 или для него установлено значение Bitmap?