c# - 在不丢失 pictureBox 的情况下处理 pictureBox 图像

标签 c# multithreading memory picturebox dispose

我正在编写一个可以播放幻灯片(以及其他内容)的程序。幻灯片由 backgroundWorker 控制,并设置为 while(true) 循环,因此它将不断播放图像。我的问题是我不确定如何处理旧图像以免它们占用内存(一段时间后程序会抛出“内存不足异常”)。如果我调用 horPicBox.Image.Dispose() 那么它之后根本不会让我使用图片框。

有没有办法从内存中释放旧图像??如果我查看 VS 中的诊断工具,每次图像更改时内存都会增加...... enter image description here

注意: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/

相关文章:

对象、数组和原始类型的 Java 和精确引用大小

java - 重复写入/删除 SSD 的风险?

c - c中的内存泄漏错误

java - 使方法同步可以确保它是线程安全的吗?

C# 寻找一种线程安全且有效的方法来捕获跨多个命名空间的耗时

C# LINQ to Entities 无法识别方法

c# - 如何从 7z 命令行进程获取扩展错误信息

python - 如何在 Python 中结束给定时间后运行的程序

c# - 从 C# Webforms 插入 MySQL 数据库,给出 ArgumentException

c# - 是否可以使用 MVC/Razor 写出生成的有序数字序列,跨越内容页和母版页?