非托管资源创建与释放

现象:
        主程序调用我的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的释放。
结论:
        释放资源应该遵循谁创建谁释放原则。

你可能感兴趣的:(C#,font,参数无效,非托管)