解決位圖載入期間的 C# 檔案鎖定問題
當 Bitmap 物件在初始化後鎖定影像檔案時(例如 pbAvatar.Image = new Bitmap(filePath)
),通常會出現錯誤訊息「該進程無法存取該文件,因為該檔案正在被另一個進程使用」。這可以防止後續嘗試存取或修改該文件。
解決方案在於釋放這個鎖。 一種高效的方法涉及直接從流加載圖像,繞過位圖構造函數的文件鎖定機制:
<code class="language-csharp">public static Image LoadImageFromStream(string path) { byte[] imageBytes = File.ReadAllBytes(path); using (MemoryStream ms = new MemoryStream(imageBytes)) { Image img = Image.FromStream(ms); return img; } }</code>
函數將圖像檔案讀取到位元組數組中,然後使用 MemoryStream 載入 Image 對象,避免檔案鎖定。 然後可以將此載入的圖片指派給您的 PictureBox(例如 pbAvatar.Image = LoadImageFromStream(filePath);
)。
效能注意事項
如果 Bitmap 物件是絕對必要的,您可以有效地轉換載入的映像:
<code class="language-csharp">return (Bitmap)Image.FromStream(ms);</code>
基準測試表明,直接從位元組數組加載(每個圖像大約 0.26 毫秒)比從現有位圖創建點陣圖(每個圖像大約 0.50 毫秒)要快得多。 這種效能提升源自於避免不必要的影像複製。
以上是如何在 C# 中解鎖位圖初始化鎖定的檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!