做了大量的自定义控件,因为想要真正的透明效果,所以每个控件都会制定this.Region限制绘图区域
using(GraphicsPath gp=new GraphicsPath(FillMode.Alternate))
{
//省略填充gp的代码
Region r=new Region(gp);
this.Region=r;
}
因为我有很多窗体,一开始不报错,当加载窗体多到一定程度就开始报错
this.Region=r;这一句代码报错
错误信息:GDI+中发生一般性错误,错误代码0x80004005,
通过代码获取到win32错误代码是0x591,不知道是什么东西溢出了
注意:不是内存泄漏
如果是内存泄漏,那么跟同时打开的窗体数量应该是无关的,而只跟内存占用有关
内存占用并不高
而且只要把窗体彻底关闭,那么即使反复打开也不会报错
但是只要同时打开的窗体数量多到一定程度(也就是使用region的控件的实例多到一定程度),就会崩溃
1.在执行this.Region=r;之前,先执行this.Region.Dispose();但所有控件的透明效果都消失了
2.在执行this.Region=r;之后,执行r.Dispose();结果所有调用控件的窗口全报错了,感觉Region变成null了
3.在new r之前,判断r如果不为空,先执行r.Dispose(),但依然报错。
是整个程序集内的Region有数量限制吗,能调大吗?
到底啥原因,咋解决?
gp.Dispose()