1

我收到错误我的代码中的 Forte Sender.exe 中发生了“System.StackOverflowException”类型的未处理异常。我知道这意味着我的代码中有一个无限循环,但我似乎找不到这个循环。这是我的代码:

表格1:

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 中的函数。我怎样才能解决这个问题?调用函数或解决无限循环的不同方式。

4

4 回答 4

6

好吧,您MainBox创建了一个ApplicationProperties,而后者又创建了一个MainBox,又创建了一个ApplicationProperties,以此类推。显然你需要打破这个循环。

正如您现在的代码所示,您可能希望删除new MainBox()属性表单并在之后注入它,例如:

ApplicationProperties ApplicationPropertiesWindow = new ApplicationProperties();
ApplicationPropertiesWindow.MainBoxWindow = this;

public partial class ApplicationProperties : Form
{
    public MainBox MainBoxWindow { get; set; }
}
于 2013-07-29T21:44:04.690 回答
2

您只需打开一个表单,它会从它的构造函数中打开另一个表单,然后它会在 t 的构造函数中再次打开第一个表单,依此类推......

创建实例时,在构造函数之前执行的字段初始化程序。

于 2013-07-29T21:44:18.577 回答
2

你的ApplicationProperties类创建一个MainBox对象,你的MainBox对象创建一个ApplicationProperties对象。这是循环。每次调用new都是该循环中的另一个构造函数调用。构造函数以一种称为相互递归的方式相互调用,这会导致堆栈溢出。

于 2013-07-29T21:44:41.290 回答
2

您正在MainBox 内部ApplicationPropertiesApplicationProperties内部创建,MainBox这将继续创建 Instances 结果StackOverFlowException

为避免这种情况,您可以在OnLoad覆盖的方法中创建实例,但是创建相互绑定的实例没有意义,您是不是要使用相同的引用?

于 2013-07-29T21:44:58.860 回答