2012-03-12 4 views
2

このコードを使用してWPF Image Controlを設定します。画像ファイルをパラレルから更新するタスクの問題

string pathToImage = System.IO.Path.Combine(Settings.ContentFolderPath, file); 

Image image = new Image(); 
BitmapImage src = new BitmapImage(); 
src.BeginInit(); 
src.UriSource = new Uri(pathToImage, UriKind.Absolute); 
src.EndInit(); 
double ratio = src.Width/src.Height; 
image.Source = src; 
image.Stretch = Stretch.Uniform; 
image.Height = marquee1.Height; 
image.Width = marquee1.Height * ratio; 
lstItems.Items.Add(image); 

はまた、私は、このイメージファイルを更新するには、いくつかの並列Taskを持っています。

しかし、私がそれを削除しようとすると、エラーが発生します。ファイルは他のプロセスによって使用中です。このファイルを削除することはできません。

この問題を解決するにはどうすればよいですか?

ありがとうございました!


UPDATES

だから、あなたのすべてに感謝!

最終溶液は、作業コードが

一般に
Image image = new Image(); 

BitmapImage src = new BitmapImage(); 
src.BeginInit(); 
src.CacheOption = BitmapCacheOption.OnLoad; 
src.CreateOptions = BitmapCreateOptions.IgnoreImageCache; 
src.UriSource = new Uri(pathToImage, UriKind.Absolute); 
src.EndInit(); 
double ratio = src.Width/src.Height; 

image.Source = src; 
image.Stretch = Stretch.Uniform; 
image.Height = marquee1.Height; 
image.Width = marquee1.Height * ratio; 
lstItems.Items.Add(image); 
result = image.Width; 

答えて

4

MSND BitmapImage.CacheOptionは言う:

OnLoadから BitmapImage.CacheOptionを設定

Set the CacheOption to BitmapCacheOption.OnLoad if you wish to close a stream used to create the BitmapImage.

BitmapImage src = new BitmapImage(); 
src.BeginInit(); 
src.UriSource = new Uri(pathToImage, UriKind.Absolute); 
src.CacheOption = BitmapCacheOption.OnLoad; 
src.EndInit(); 
0

Also I have some parallel Task to update this image file ... when I try to delete it I am getting the error

のように見えます

src.CacheOption = BitmapCacheOption.OnLoad; 
src.CreateOptions = BitmapCreateOptions.IgnoreImageCache; 

プロセスがそれを使用している間、あなたは、Windowsのファイルを削除することはできません実装する必要があります。この制限については、コンシューマ向けWindows FAQにthis pageが記載されています。 MSDN describesと入力すると、File.Deleteは使用中のファイルの削除を拒否します。

+2

だけのノートとして、あなたは 'FILE_SHARE_DELETE' /' FileShare.Delete'でファイルを開き、のことができるように可能性'File.Delete()'を使用しますが、WPFは画像を開くときにそのモードを使用しません。 – user7116

1

BitmapImageのCacheOption propertyBitmapCacheOption.OnLoadに設定します。これにより、イメージがメモリに読み込まれ、元のファイルが閉じられ、元のファイルが削除されます。

+0

なぜdownvoteですか? –

関連する問題