大型表格在第二次打开时崩溃

时间:2013-12-23 21:08:58

标签: c# winforms reflection nullreferenceexception dispose

我有这个问题,我有一个非常大的形式(winforms)通过Activation.CreateInstance(Type)方法加载,因为加载容器用于不同的形式。它在第一次打开时很好,但是如果我关闭它然后重新打开它,它将始终在InitializeComponent()方法的中途崩溃,在那里它“跳转”到Dispose()方法,崩溃在{{{ 1}}。

我目前的理论是NullReferenceException调用来自前一个没有时间完成的表单实例,现在正试图处理当前表单。 (这有什么意义吗?)另一方面,我认为可能是造成问题的Dispose(),但这是我第一次看到这个课程,所以我也不太确定。

我今天早些时候在调试时做了一个测试,如果我在崩溃Activation.CreateInstance()中的每一行等了几秒钟,我没有错误地完成了。

1 个答案:

答案 0 :(得分:0)

最后我找到了bug的起源:加载表单有数百个网格,每个工具栏上都有5-6个图标。并且,资源管理器有点愚蠢,而不是每次都重复使用相同的图标(工具栏是同一个用户控件的实例),它每次实例化一个新的位图,运行内存不足。但是,它没有出现明显错误,而是松开它并开始处理调用对象,因此处理不完整创建的对象。所以这里的解决方案是确保在使用资源管理器时只加载一次图像。它不仅能解决崩溃问题,而且加载速度更快。