从上一个问题的答案中,Hans Passant
我了解到:
MyImage = new Bitmap(openFileDialog1.FileName);
pictureBox1.Image = (Image)MyImage;
是的,该代码锁定了文件。锁是由 GDI+ 创建的内存映射文件对象产生的,它可以有效地将文件的像素数据映射到内存中,而无需在分页文件中分配空间。只要图像显示在图片框中并且未处理,您将无法删除文件,锁定可以防止这种情况。
问题是当我尝试从PictureBox
. 似乎在这种确切的情况下甚至调用:
if (MyImage != null)
{
MyImage.Dispose();
}
不保证在删除图像的时候(我猜这可能是任何类型的非托管资源)它会被处理掉。
所以我有两个问题 - 第一个问题与我当前使用BitMap
inPictureBox
和由此引起的资源锁定问题有关。我看到这不是在内部显示图像的唯一方法,PictureBox
所以还有另一种不会导致此问题的方法,并且可以保证在我需要的任何时候释放图像以将其删除。
我的第二个问题 - 当我必须在 .NET 中使用非托管资源并且我需要对它们进行类似操作时,基本方法是什么Delete
。我想在.NET中使用任何类型的非托管资源时可能会出现这个问题,是否有一种通用的方法来解决在某个时刻锁定/释放资源而不是中继的问题Garbage Collector
(这显然会让你失败不时,因为它可能需要不同的时间来发布)。我看到一些使用GC...
方法来显式调用finilizer
和类似的东西,但是一所大学提到最好不要使用这些方法,因为它们可能会导致不可预测的问题。
那么有什么指导方针和建议吗?