從Hans Passant
給前一個問題的答案,我明白了:使用位圖對象不鎖定資源
MyImage = new Bitmap(openFileDialog1.FileName);
pictureBox1.Image = (Image)MyImage;
是,這些代碼放在一個鎖定的文件。該鎖由GDI +創建的內存映射文件對象生成,以便將文件的 像素數據有效映射到內存中,而無需在分頁文件中分配 中的空間。只要 圖像顯示在圖片框中而不會丟棄,您將無法刪除該文件,鎖 可以防止該情況發生。
問題是有關錯誤的(有時)當我試圖從PictureBox
刪除以前使用的圖像。看來,在這個確切的情況甚至稱:
if (MyImage != null)
{
MyImage.Dispose();
}
並不能保證到時候刪除圖像(我猜這可能是任何種類的非託管資源的),它會被佈置。
所以我有兩個問題 - 第一個問題與BitMap
在PictureBox
中使用BitMap
以及由此導致的資源鎖定有關。我看到這不是在PictureBox
內顯示圖像的唯一方式,所以有另一種方式不會導致此問題,並且可以保證圖像在我需要的時候被釋放並刪除。
我的第二個問題 - 當我必須在.NET中使用非託管資源時,基本方法是什麼,我需要使用它們來執行像Delete
這樣的操作。我想這個問題可能出現在.NET中使用任何類型的非託管資源時,是否有一種常見的方法來解決在某個時刻鎖定/釋放資源的問題,而不是在Garbage Collector
上進行中繼(這顯然會失敗你時不時,因爲它可能需要不同的時間來釋放)。我看到一些人使用GC...
方法明確地調用finilizer
之類的東西,但大學提到最好不要使用這些方法,因爲它們可能會導致不可預知的問題。
那麼,任何指導方針,建議?