C# Graphics对象调用Dispose()方法后,为什么绘制的图像还在?

first_yang 2011-12-27 09:26:34
C#中 Graphics对象调用Dispose()方法后,为什么窗体绘制的图像还在?Dispose()方法不是已经将Graphics对象清除了吗?
请大虾根据这个问题,详细解释下原理,谢谢。
Graphics objGraphics = null ;
objGraphics = this.CreateGraphics();
objGraphics.Clear(SystemColors.Control);
objGraphics.DrawRectangle(Pens.Blue,a.Left-1,a.Top-1,a.Width+1,a.Height+1);
objGraphics.Dispose();//执行完这句后,为什么绘制的图像还在?
...全文
572 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wushuai1346 2011-12-27
  • 打赏
  • 举报
回复
因为他只是一个画笔,1#的解释已经非常生动明了了
first_yang 2011-12-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dylike 的回复:]
Graphics objGraphics = null ;
objGraphics = this.CreateGraphics();
objGraphics.Clear(SystemColors.Control);
objGraphics.DrawRectangle(Pens.Blue,a.Left-1,a.Top-1,a.Width+1,a.Height+1);
objGraphics.……
[/Quote]

其实我主要想知道Dispose()方法为什么对Graphics对象没有影响,矩形是在Graphics对象里存储的,为什么释放资源了,显示器上的图像还在
dylike 2011-12-27
  • 打赏
  • 举报
回复
Graphics objGraphics = null ;
objGraphics = this.CreateGraphics();
objGraphics.Clear(SystemColors.Control);
objGraphics.DrawRectangle(Pens.Blue,a.Left-1,a.Top-1,a.Width+1,a.Height+1);
objGraphics.Dispose();//执行完这句后,为什么绘制的图像还在?
this.invlaidate()
first_yang 2011-12-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 viewstates 的回复:]
好比一块画板,你将画完的画笔扔了能让已经画在画板上的图也消失么?
[/Quote]

你看我的理解对不对,当然是我想当然的理解:就是显卡从内存调用数据在显示器上显示,数据已经到显卡里了,所以把内存里的清除掉用显卡没有影响,我菜鸟,不知道这样理解的话有什么不妥。
porschev 2011-12-27
  • 打赏
  • 举报
回复

用using试试


using (Graphics objGraphics = this.CreateGraphics)
{
//其它代码
}

或者用个try。。。catch。。。。finally

try
{

}
catch()
{

}
finally
{
if(objGraphics != null)
((IDisposable)objGraphics).Dispose();
}



ViewStates 2011-12-27
  • 打赏
  • 举报
回复
好比一块画板,你将画完的画笔扔了能让已经画在画板上的图也消失么?

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧