c# - System.Drawing.dll 附加信息 : Out of memory 中发生类型为 'System.OutOfMemoryException' 的未处理异常

标签 c# winforms bitmap clone

我有一个“图片”列表,其中包含大约 20 张照片,每张大约 1MB。我想通过单击下一步按钮滚动浏览列表中的图像。但是大约 8 张照片后我就记不住了。

    private void button4_Click(object sender, EventArgs e) //next
    {
        index++;
        if (index >= images.Count) index = 0;
        CurrImage = images[index]; 
        Bitmap b = new Bitmap((Bitmap)CurrImage.Clone()); //breakpoint occurs her
        pictureBox1.Image = b; 

        NewThread = new Thread(new ThreadStart(ChooseColors2));
    }

ChooseColors2 线程将使用“CurrImage”以避免竞争条件,我通过创建一个新的位图来避免这种情况,如上所示

请注意,如果我使用 pictureBox1.Image = CurrImage;如果不创建新的位图,我不会收到此错误,但线程会出现竞争条件异常。

最佳答案

您可以在将新位图分配给 pictureBox1.Image 之前尝试调用以下命令,以删除先前的"new"位图并释放资源:

pictureBox1.Image.Dispose();

关于c# - System.Drawing.dll 附加信息 : Out of memory 中发生类型为 'System.OutOfMemoryException' 的未处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15491026/

相关文章:

c# - 模态消息框线程问题

android - 转换为位图时未呈现 CardView 阴影

android - 检测使用 Rect 变换绘制的位图的触摸

android wear : only picture, 无标题第二页

windows - winforms、web窗体和windows窗体的区别

c# - 如何使 PictureBox 使用最近邻重采样?

c# - Application.Exit需要调用两次

C# - 内部静态只读在访问时为空

c# - 获取子字符串会导致错误

c# - 在进程终止时释放资源