我收到错误我的代码中出现了Forte Sender.exe 中出现'System.StackOverflowException'类型的未处理异常。我理解这意味着我的代码中存在无限循环,但我似乎无法找到这个循环。这是我的代码:
Form1中:
public partial class MainBox : Form
{
//Making a name for the ApplicationProperties form. It can be opened when called.
ApplicationProperties ApplicationPropertiesWindow = new ApplicationProperties();
//All of the functions for form1 below.
窗体2:
public partial class ApplicationProperties : Form
{
MainBox MainBoxWindow = new MainBox();
//All of the funcitons for form2 below.
所以我注意到如果我拿出MainBox MainBoxWindow = new MainBox();
程序将正确运行。但我需要那个实例来调用Form1中的函数。我怎样才能解决这个问题?无论是调用函数还是解决无限循环的不同方式。
答案 0 :(得分:6)
好吧,您的MainBox
会创建一个ApplicationProperties
,而MainBox
会创建一个ApplicationProperties
,从而无限制地创建一个new MainBox()
。显然你需要打破这个循环。
正如您的代码现在所示,您可能希望删除属性表单的ApplicationProperties ApplicationPropertiesWindow = new ApplicationProperties();
ApplicationPropertiesWindow.MainBoxWindow = this;
并在之后注入它,例如:
public partial class ApplicationProperties : Form
{
public MainBox MainBoxWindow { get; set; }
}
和
{{1}}
答案 1 :(得分:2)
你只需打开一个表单,然后从它的构造函数中打开另一个表单,它会在t的构造函数中再次打开第一个表单,等等......
在创建实例时,在构造函数之前执行字段初始值设定项。
答案 2 :(得分:2)
您的ApplicationProperties
类会创建一个MainBox
对象,而您的MainBox
对象会创建一个ApplicationProperties
对象。这是循环。每次调用new
都是该循环中的另一个构造函数调用。构造函数在称为相互递归的东西中相互调用,这会导致堆栈溢出。
答案 3 :(得分:2)
您正在MainBox
内部ApplicationProperties
和ApplicationProperties
内创建MainBox
,这将继续创建由StackOverFlowException
生成的实例
为了避免这种情况,您可以在OnLoad
重写方法中创建实例,但创建相互关联的实例没有意义,您是否意味着使用相同的引用?