Dim bmi As New BitmapImage(New Uri(fiInfo.FullName, UriKind.Absolute))
bmi.CacheOption = BitmapCacheOption.OnLoad
這並不Use OnLoad 和文件仍然被鎖定覆蓋在硬盤。任何想法如何解鎖?
問候
Dim bmi As New BitmapImage(New Uri(fiInfo.FullName, UriKind.Absolute))
bmi.CacheOption = BitmapCacheOption.OnLoad
這並不Use OnLoad 和文件仍然被鎖定覆蓋在硬盤。任何想法如何解鎖?
問候
如您鏈接到的問題顯示,你需要調用BeginInit在和EndInit,像這樣以及設置UriSource屬性:
Dim bmi As New BitmapImage()
bmi.BeginInit()
bmi.CacheOption = BitmapCacheOption.OnLoad
bmi.UriSource = New Uri(fiInfo.FullName, UriKind.Absolute)
bmi.EndInit()
感謝您對我的關鍵字和VB而不是C#的快速回復!現在很好用! – Nasenbaer
是否有嚴格使用XAML的方式來執行此操作。 – TrustyCoder
從文件中讀取的BitmapImage
並用MemoryStream
改寫它:
MemoryStream ms = new MemoryStream();
BitmapImage bi = new BitmapImage();
byte[] bytArray = File.ReadAllBytes(@"test.jpg");
ms.Write(bytArray, 0, bytArray.Length);ms.Position = 0;
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
image.Source = bi;
BitmapFrame.Create(new Uri(filePath), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
我作爲imilar的問題,我解決了使用這種方法: (這是一個答案here的個性化)
public static BitmapImage BitmapFromUri(Uri source)
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = source;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
return bitmap;
}
您可以打開圖像是這樣的:
BitmapImage bimg = BitmapFromUri(new Uri(some_URI));
並將其加載之後立刻釋放圖像。
希望它可以幫助!
還有內存問題需要看看。見http://stackoverflow.com/questions/6271891/net-memory-issues-loading-40-images-memory-not-reclaimed-potentially-due-to-l/6271982#6271982 – Oppositional
謝謝。你是否想讓我說,如果你的鏈接不可能實現緩存所有文件? – Nasenbaer