wpf imagesource=null 同时清空内存
确保imagesource只有image控件引用的情况下,这么赋值:
BitmapImage image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri(list[current], UriKind.RelativeOrAbsolute);
image.EndInit();
Image imageControl = new Image();
imageControl.Source = image;
测试代码:
///
/// MainWindow.xaml 的交互逻辑
///
public partial class MainWindow : Window
{
List
public MainWindow()
{
InitializeComponent();
string dir = @"C:\Users\Sam\Pictures\大图";
for (int i = 0; i < 6; i++)
{
list.Add($"{dir}{i}.png");
}
}
int current = 0;
int max = 5;
//HttpClient httpClient = new HttpClient();
private /*async*/ void Button_Click(object sender, RoutedEventArgs e)
{
//不清空图片控件,清除每个图片控件的source
foreach (var item in container.Children)
{
if (item is Image)
{
Image img = (Image)item;
img.Source = null;
}
}
////清空图片控件--ok,可以清空内存
//var listx = new List<Image>();
//for (int i = 0; i < container.Children.Count; i++)
//{
// if (container.Children[i] is Image)
// {
// Image img = (Image)container.Children[i];
// listx.Add(img);
// }
//}
//foreach (var item in listx)
//{
// container.Children.Remove(item);
//}
GC.Collect();
//Image image = new Image();
//image.Source = new BitmapImage(new Uri(list[current], UriKind.RelativeOrAbsolute));
BitmapImage image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri(list[current], UriKind.RelativeOrAbsolute);
image.EndInit();
Image imageControl = new Image();
imageControl.Source = image;
container.Children.Add(imageControl);
current++;
if (current > max)
{
current = 0;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?