5

ユーザー perfil 編集ウィンドウを作成しようとしています。このウィンドウにはイメージ コントロールがあり
ます。イメージ ファイルを選択すると、このイメージ コントロールに表示され、このファイルがイメージ フォルダにコピーされます。1 回目は問題ありませんが、2 回目は、エラーが表示されます

「別のプロセスで使用されているため、プロセスはファイル 'C:\1.jpg' にアクセスできません。」

私の画像コントロールがこのファイルを使用しているためだと思うので、どうすればよいかわかりません

private void Select_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog od = new OpenFileDialog();
    if (od.ShowDialog() == true)
    {
        string imageLocal = @"C:/1.jpg";
        File.Copy(od.FileName, imageLocal, true);
        image1.Source = new BitmapImage(new Uri(imageLocal));
    }
}
4

3 に答える 3

2

以下に示すメソッドは、ファイルから BitmapImage を読み込み、読み込み後すぐにファイルを閉じます。BitmapCacheOption.OnLoadソースストリームが の直後に閉じられたときにフラグを設定する必要があることに注意してくださいEndInit

public static BitmapImage LoadBitmapImage(string fileName)
{
    using (var stream = new FileStream(fileName, FileMode.Open))
    {
        var bitmapImage = new BitmapImage();
        bitmapImage.BeginInit();
        bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
        bitmapImage.StreamSource = stream;
        bitmapImage.EndInit();
        bitmapImage.Freeze(); // just in case you want to load the image in another thread
        return bitmapImage;
    }
}

このコードは、WPF でサポートされているすべての画像形式で機能します。画像ファイルのコンテンツをストリームとしてStreamSourceプロパティに渡すと、WPF は適切なデコーダーを自動的に作成します。

于 2013-08-11T05:38:02.150 に答える