我正在开发64位MDI Winforms应用程序。当应用程序启动时,它会继续加载大量数据 - 当满载时,进程内存大约为9 GB。
加载后,用户可以选择多种表单中的一种,这些表单显示为MDI子项。
SomeForm f = new SomeForm(); // Oops. v1 of this question had null here! Edited to correct this.
f.MdiParent = this; // Boom! AccessViolationException
f.Show();
这就是我实例化和显示子表单的方式。这正是我做了几十次的事情,除了现在我在执行第二行时遇到AccessViolationException。任何人都知道为什么这会给我一个问题?一些想法:
64位Winforms。 64位Windows下的MDI功能可能还没有被正确测试。 MDI有点过时了。
DEP(数据执行保护)的一些问题 - 进程大小是否存在某种内部限制,DEP超出此限制?
某种线程问题。上述8 GB以上的数据是通过新的Thread()对象加载的。这会频繁回调主机表单以更新进度,主机表单会正确显示。 (UI代码包含在Invoke语句中)。数据加载过程完成后,线程终止;
不太可能的场景,但我抓着稻草。
答案 0 :(得分:1)
您必须创建SomeForm
类
SomeForm f = new SomeForm(); // <- instead of " = null"
f.MdiParent = this; // <- that's quite OK to assign value to the isntacne
f.Show();
答案 1 :(得分:0)
你确定new SomeForm()
在构造函数中没有失败吗?
在这种情况下,您尝试在此行中设置Disposed
对象的属性:
f.MdiParent = this;