为什么List会破坏添加到它的位图?

时间:2018-03-27 21:14:42

标签: c# asp.net list bitmap

当添加到List中时,位图基本上被删除了。 我做错了什么?

处理位图是否会破坏添加到List中的位图?

List<Bitmap> _list = new List<Bitmap>();

public void MyMethod()
{
    using (var _bitmap = new Bitmap(1920, 1080))
    {
        _list.Add(_bitmap);
    }
}

我在第_list.Add(_bitmap);行添加了断点,这是添加前的位图:

before

这就是它在列表中的时间:

enter image description here

2 个答案:

答案 0 :(得分:2)

这是你的行

using (var _bitmap = new Bitmap(1920, 1080))
{
    _list.Add(_bitmap);
} //_bitmap  is destroyed here

Bitmal派生自实现IDisposable的{​​{3}}类,因此在关闭结束时,Dispose将在Bitmap上调用。

您可能希望避免在此方案中使用using

值得一提的是_list.Add(..)添加了创建的位图实例的引用,并且不复制/克隆它。

答案 1 :(得分:0)

  

处理位图是否会破坏添加到List中的位图?

嗯,当然可以。该列表内部没有任何位图,它只有指向位图的指针(即指向存储每个位图的存储器地址的指针)。因此,一旦处理了位图,指针就会指向一个空的内存地址。

如果您正在从需要释放的文件或其他资源创建这些位图,那么在创建位图后克隆位图,处理原始位图(您已使用using()语句执行此操作),并将克隆添加到列表中:

using (var _bitmap = new Bitmap("flower.png")) {
    Bitmap clone = Bitmap(_bitmap);
    _list.Add(clone);
}