我正在尝试开发 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 或设置为它的底层位图相关的资源?