您的位置:首页 > 其它

非托管资源创建与释放

2015-11-05 23:09 232 查看
现象:
主程序调用我的DLL库无法运行;异常信息显示
BUG:
Exception:参数无效。
System.ArgumentException
Stack Trace:
在 System.Drawing.Graphics.CheckErrorStatus(Int32 status)
在 System.Drawing.Graphics.DrawString(String s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format)

在 Nova.Rss.RssToImage.RssItemAsSingleLine(RssItemInfo item, Int32 wndHeight, Bitmap& bmp)

在 Nova.Rss.RssToImage.RssToSingleLineImage(RssInfo rssInfo, Int32 wndHeight, Color backColor, List`1& imgList)
解决过程:
最后将问题锁定到了其中的参数Font font上,替换从上层传入的font为固定的font;异常信息出现在了其他的含有font参数的函数中。

推断,主程序所赋值的最外层接口的Font有问题,该font为接口所在类的一个成员变量。查看外层代码后发现,外层的所传入到类成员变量的font,来自于一个公共的参数库。所以外层传入的这个font并没有问题。
我的dll库这个类含有一个Dispose方法,而这个方法中有一个语句执行的是对成员变量_font的注销操作,问题就出在这里。
外层调用了我的Dispose方法后,导致了外层所用的font的释放。
结论:
释放资源应该遵循谁创建谁释放原则。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: