System.Drawing.dll中发生未处理的“System.OutOfMemoryException”类型异常附加信息:内存不足

时间:2013-03-19 03:33:56

标签: 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;在没有创建新的位图的情况下,我没有得到这个错误,但是线程会出现竞争条件异常。

2 个答案:

答案 0 :(得分:4)

您可以在将新位图指定给pictureBox1.Image之前尝试调用以下内容,以删除之前的“新”位图并释放资源:

pictureBox1.Image.Dispose();

答案 1 :(得分:0)

我相信您也可以尝试使用using关键字;因为它将确保对象在其作用域之后直接处置。您可以这样:

using (Bitmap b = new Bitmap((Bitmap)CurrImage.Clone()))
{
    pictureBox1.Image = b;
}`

有关更多详细信息,请查看What are the uses of “using” in C#

相关问题