当前位置: 代码迷 >> C# >> GC调用finalize()释放System.Drawing.Graphics的非托管资源时错误!该对象在其他地方使用
  详细解决方案

GC调用finalize()释放System.Drawing.Graphics的非托管资源时错误!该对象在其他地方使用

热度:62   发布时间:2016-05-05 04:42:06.0
GC调用finalize()释放System.Drawing.Graphics的非托管资源时异常!该对象在其他地方使用!
GC调用finalize()释放System.Drawing.Graphics的非托管资源时异常!提示该对象在其他地方使用!
在下百思不得解的是:GC如果已经决定调用某对象的finalize()时,说明此对象已经没有地方再引用了啊!也就是说肯定没地方使用了啊!为什么它释放资源的时候还会报异常,说该对象在其他地方使用!

我可以明确,此异常是GC自动调用finalize()时引发的,不是我手动调用Dispose()时引发的!

哪方大侠救我!着急ing.
------解决思路----------------------
.net上和gdi+相关的bug很多,你说的比较像这个:http://support.microsoft.com/kb/2650146

GC只能追踪托管资源,虽然这个对象在托管环境没有引用了,但是它或者它内部的东西可能还在非托管环境被使用。比如一些分配的gdi+的句柄,如果dispose的时候想释放它,但是这个时候gdi+自己判断这个句柄还有用,不允许释放,那就会错了。

Graphics类是标准的dispose模式,析构方法就是调用了Dispose(false)而已,自己调用Dispose相当于调用Dispose(true),然后GC.SuppressFinalize(this)。
  相关解决方案