【问题标题】:How to Clear an image control in WPF (C#)如何在 WPF (C#) 中清除图像控件
【发布时间】:2011-02-07 10:30:54
【问题描述】:

我有一个图像控件,其源图像位于我的 c 驱动器中。每当我尝试删除原始图像以用另一个动态更改它时,我都会收到一条消息,表明该图像正在被另一个进程使用。如何从图像控件中释放图像以便能够将其删除。

我试过这个变种:

string path = ((BitmapImage)img.Source).UriSource.LocalPath;
img.SetValue(System.Windows.Controls.Image.SourceProperty, null);
File.Delete(path);

还有:

string path = ((BitmapImage)img.Source).UriSource.LocalPath;
img.Source = null;
File.Delete(path)

但这行不通……

【问题讨论】:

标签: c# .net wpf image controls


【解决方案1】:

尝试通过流源属性设置位图图像。这样,应用程序就不会锁定文件,因为您是通过流加载它的。

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.streamsource(VS.85).aspx

【讨论】:

  • 2Kevin:有趣的方式,但在这种情况下,我需要在 File.Delete 之前使用 fs.Close()。这不是很方便。还有其他选择吗?
  • 我看到的另一个选项是将图像复制到临时目录并打开临时文件。
  • 我看到其他帖子,即使在控件出于某种原因应该释放图像而没有解释之后,文件看起来也只是锁定了。
  • 很明显。感谢您的帮助!
【解决方案2】:

//这个函数可以让你从文件中加载图像并释放它

 BitmapImage loadPhoto(string path)
    {
        BitmapImage bmi = new BitmapImage();
        bmi.BeginInit();
        bmi.CacheOption = BitmapCacheOption.OnLoad;
        bmi.CreateOptions = BitmapCreateOptions.IgnoreImageCache;            
        bmi.UriSource = new Uri(path);
        bmi.EndInit();
        return bmi;
    }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2017-02-18
  • 2011-05-25
  • 2012-04-22
相关资源
最近更新 更多