【问题标题】:Scope of using block on an external variable在外部变量上使用块的范围
【发布时间】:2017-09-29 07:06:33
【问题描述】:

一旦使用块处理“b”,“渲染”中的图像会发生什么?

Bitmap rendered;

using(Bitmap b = new Bitmap(calcHeight, calcWidth))
{
   using (Graphics g = Graphics.FromImage(b))
   {
        RenderMyBitMap(ref b);
        rendered = b;
   }
}
//Outside Using block
DoSomeThingElseWith(rendered);

【问题讨论】:

  • 你自己试试看吧?
  • 因为还有对b的引用,所以不会被车库收集。当rendered设置为null时,下一轮的garage collection会将其带走。
  • 我没有看到任何错误。找不到我是否正在填满内存(等待发生的 OOM 异常)或者它是安全的。黑蛙的回答似乎是有道理的。但无法检查。

标签: c# using-statement


【解决方案1】:

变量rendered 指向与b 相同的实例。如果您在using 块之后尝试访问它,您将得到一个ObjectDisposedException,即

对已释放的对象执行操作时引发的异常。

【讨论】:

    猜你喜欢
    • 2020-07-31
    • 2016-12-20
    • 1970-01-01
    • 2021-08-18
    • 2014-05-19
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多