2016-08-28 15 views
1

Image.Sourceプロパティを同じファイルパスに更新したいが、更新したい。私はSourceプロパティを設定するためのメソッドを使用しています。Image.Sourceを解放してWPFでイメージを更新するにはどうすればよいですか?

METHOD:

void setImageSource(string file) 
    { 
     BitmapImage image = new BitmapImage(); 
     image.BeginInit(); 
     Uri imageSource = new Uri(file); 
     image.CacheOption = BitmapCacheOption.OnLoad; 
     image.UriSource = imageSource; 
     image.EndInit(); 

     ssPreview.Source = image; 
    } 

ソースの最初のセットでは問題ありません。しかし、このメソッドを2回目に呼び出すと、ssPreview.Source = image行にエラーがスローされます。エラーはcannot access file because it is being used by another processと表示されます。

この問題は解決できません。どのようにそれを解決するには?

答えて

2

エラーメッセージは、画像ファイルがBitmapImageを作成しようとしている間にまだ開いていることを示しています。これは更新後に閉じなかったことを意味します。


はそれに加えて、ファイルからたBitmapSourceをロードするためのより安全な方法は、以下に示すように、ウリの代わりFileStreamを使用することであろう。これにより、WPFによって行われる可能性のあるイメージURIキャッシングが確実に回避されます。

private static BitmapSource LoadImage(string path) 
{ 
    var bitmap = new BitmapImage(); 

    using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)) 
    { 
     bitmap.BeginInit(); 
     bitmap.CacheOption = BitmapCacheOption.OnLoad; 
     bitmap.StreamSource = stream; 
     bitmap.EndInit(); 
    } 

    return bitmap; 
} 

か短い:

private static BitmapSource LoadImage(string path) 
{ 
    using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)) 
    { 
     return BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 
    } 
} 
関連する問題