类型为'System.OutOfMemoryException'发生在System.Drawing.dl

本文关键字:System Drawing dl 类型 OutOfMemoryException | 更新日期: 2023-09-27 18:04:31

我有一个列表"images",其中包含大约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;没有创建一个新的位图,我没有得到这个错误,但会有竞争条件异常与线程。

类型为'System.OutOfMemoryException'发生在System.Drawing.dl

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

pictureBox1.Image.Dispose();

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

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

>