2011-09-17 147 views
1
private void ButtonCustomarinfoEditClick(object sender, System.Windows.RoutedEventArgs e) 
    { 
     ByteToImage(fileName,bytesOfImage,fileSize); 
    } 

private ImageSource ByteToImage(string fileName, byte[] bytesOfImage, int fileSize) 
    { 
     FileStream imageFilestream = new FileStream(fileName, FileMode.Create, FileAccess.Write); 
     imageFilestream.Write(bytesOfImage, 0, fileSize); 
     imageFilestream.Flush(); 
     imageFilestream.Close(); 
     imageFilestream.Dispose(); 
     BitmapImage myBitmapImage = new BitmapImage(); 
     myBitmapImage.BeginInit(); 
     myBitmapImage.UriSource = new Uri(fileName); 
     myBitmapImage.DecodePixelWidth = 200; 
     myBitmapImage.EndInit(); 
     return myBitmapImage; 
    } 

私がButtonCustomarinfoEdit fistをクリックすると、うまく動作します。しかし、2回目にクリックするとこの例外がスローされますファイルが別のプロセスで使用されています

「このプロセスは別のプロセスで使用されているため、ファイル 'C:\ 20.jpg'にアクセスできません。 (System.IO.IOException)
Exception Message = "他のプロセスで使用されているため、 'C:\ 20.jpg'ファイルにアクセスできません。"、例外タイプ= "System.IO.IOException"

+1

[BitmapImage in WPF does lock file](http://stackoverflow.com/questions/6430299/bitmapimage-in-wpf-does-lock-file)の複製が可能です。 – BrokenGlass

答えて

3

BitmapImageオブジェクトはファイルをロックしたままにします。

ただ、小さな観察、このようなusing statementを使用してください:

using(FileStream imageFilestream = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { 
     imageFilestream.Write(bytesOfImage, 0, fileSize); 
} 

例外が発生する場合は、close()メソッドを呼び出す前に、そうでない場合、あなたは(あなたのファイルが使用中で残るような状況に遭遇するかもしれません

関連する問題