使用文件选择器更改图像的 ImageSource 时,弹出该文件正在使用中

On changing the ImageSource of the Image using file picker, pop up raised that the file is in use

我有一个带有默认 ImageSource 的图像,在使用文件选择器选择新图像时它加载正常,然后再次选择以前使用的文件,弹出窗口提示该文件仍在使用中。每次选择新图像时,它都工作正常。 有什么方法可以关闭或处置之前选择的文件或其 ImageSource 吗?

 <Image x:Name="image" Source="Assets\RoadView.jpeg"></Image>

  private void change_Click(object sender, RoutedEventArgs e)
    {
        OpenFileDialog openFileDialog = new OpenFileDialog();
        openFileDialog.Filter = "Image Files ( *.png, *.bmp *.jpg, *.gif, *.tif)|*.png;*.bmp;*.jpg;*.gif;*.tif";
        openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);

        if (openFileDialog.ShowDialog() == true)
        {
            Stream stream = File.Open(openFileDialog.FileName, FileMode.Open);
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.BeginInit();
            bitmapImage.StreamSource = stream;
            bitmapImage.EndInit();
            image.Source = bitmapImage;
        }
    }

您没有关闭 FileStream,因此文件保持打开状态,无法再次打开。

关闭 FileStream 的最简单方法是通过 using 块处理对象。为了在关闭流之前立即加载 BitmapImage,您还需要设置 BitmapCacheOption.OnLoad.

var bitmapImage = new BitmapImage();

using (var stream = File.Open(openFileDialog.FileName, FileMode.Open))
{
    bitmapImage.BeginInit();
    bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
    bitmapImage.StreamSource = stream;
    bitmapImage.EndInit();
}

image.Source = bitmapImage;