做C# winform開發時,遇到洗掉檔案的問題,發現GC回收時也不會有生效。描述如下:
所開發的程式會打開本地的一張圖片并顯示在form上,用戶可以通過delete button洗掉這張圖片。在洗掉之前要將相關的物件,例如,PictureBox釋放。然后利用File.Delete()來洗掉檔案。發現不能洗掉,拋UnauthorizedAccessException例外。
通過在PictureBox釋放之前和File.Delete()之前設定斷點發現,有不同:釋放之前,如果手動洗掉檔案報下面的提示:操作無法完成,因為檔案已在XXX程式中打開。在釋放之后,File.Delete()之前,手動洗掉時,提示,操作無法完成,因為檔案已在另一個程式中打開。不同的地方是前者指明了具體的程式,后者沒有指出程式。后者這種情況通過shift+delete的方式是可以洗掉的。
綜上所述,C# Winform 程式釋放資源不會立即有效,并沒有完全完成釋放。
uj5u.com熱心網友回復:
UnauthorizedAccessException例外,請確認檔案路徑是否正確。GC回收資源確實不是立即執行的,但只要把檔案的物件參考取消,是可以洗掉檔案的。
uj5u.com熱心網友回復:
你會發現很多人是封裝成方法的Bitmap Loadimage(string path)
{
using(filestream)
{
return Bitmap
}
}
Picturebox有很多古怪的占用問題,例外問題。so,程式員們早已養成“只操作副本,不操作原始物件”的習慣
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/50902.html
標籤:C#
