我正在编写一个可以播放幻灯片(以及其他内容)的程序。幻灯片由 backgroundWorker 控制,并设置为 while(true) 循环,因此它将不断播放图像。我的问题是我不确定如何处理旧图像以免它们占用内存(一段时间后程序会抛出“内存不足异常”)。如果我调用 horPicBox.Image.Dispose() 那么它之后根本不会让我使用图片框。
有没有办法从内存中释放旧图像??如果我查看 VS 中的诊断工具,每次图像更改时内存都会增加......
注意:ImagePaths 是幻灯片图像的文件路径列表。
这是 backgroundWorker 运行的代码:
private void PlayImages()
{
Random r = new Random();
int index;
Stopwatch watch = new Stopwatch();
while (true)
{
index = r.Next(imagePaths.Count);
horPicBox.Image = Image.FromFile(imagePaths[index]);
watch.Start();
while (watch.ElapsedMilliseconds < 5000)
{
}
watch.Stop();
watch.Reset();
//picWorker.ReportProgress(0);
}
}
我可以向 UI 线程报告 progressChanged,但我不确定我需要从 UI 线程(如果有的话)做什么来释放旧图像。提前致谢!!
最佳答案
如果您将图像存储到该类型的变量中,然后设置您的图片框图像,然后像处理旧图像一样处理
Image oldImage = horPicBox.Image;
horPicBox.Image = Image.FromFile(imagePaths[index]);
oldImage.Dispose();
关于c# - 在不丢失 pictureBox 的情况下处理 pictureBox 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39439942/