2011-06-21 6 views
13

ん:これはUse OnLoad 、ファイルがまだハードディスクに上書きするのBitmapImageは、私が使用したロックファイル

Dim bmi As New BitmapImage(New Uri(fiInfo.FullName, UriKind.Absolute)) 
bmi.CacheOption = BitmapCacheOption.OnLoad 

ロックされていません。任意のアイデアをロック解除する方法?

よろしく

+0

また、メモリの問題もあります。 http://stackoverflow.com/questions/6271891/net-memory-issues-loading-40-images-memory-not-reclaimed-potentially-due-to-l/6271982#6271982 – Oppositional

+0

を参照してください。本当にあなたのリンクではできない場合はすべてのファイルをキャッシュしようとしないように言いたいですか? – Nasenbaer

答えて

30

あなたにリンクして質問に示すように、あなたはBeginInitのとEndInitを呼び出す必要がある、などのようにだけでなく、UriSourceプロパティを設定したい:

Dim bmi As New BitmapImage() 
bmi.BeginInit() 
bmi.CacheOption = BitmapCacheOption.OnLoad 
bmi.UriSource = New Uri(fiInfo.FullName, UriKind.Absolute) 
bmi.EndInit() 
+0

C#の代わりにキーワードとVBに関するご返信ありがとうございます!今すぐ素晴らしい作品! – Nasenbaer

+0

XAMLを使用してこれを厳密に行う方法はありますか? – TrustyCoder

7

ファイルから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; 
+0

ありがとうございました。私が見る限り、それはそのように動作することがわかります。私は 'bmi.EndInit()'メソッド+ 'OnLoad 'を使っていますが、私の場合はもう少し簡単です。 – Nasenbaer

+0

ここで、MemoryStreamオブジェクトインスタンスを所有し、それを処分するのは誰ですか? – Henrik

+1

とにかく...ファイルのロックを解除して削除するには? –

0
BitmapFrame.Create(new Uri(filePath), BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 
2

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)); 

そして、それはそれをロードした後すぐに画像を解放。

希望すると助かります!

関連する問題