2013-07-29 4 views
1

Я получаю сообщение об ошибке Необработанное исключение типа «System.StackOverflowException» произошло в 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. 

Form2:

public partial class ApplicationProperties : Form 
{ 
    MainBox MainBoxWindow = new MainBox(); 
    //All of the funcitons for form2 below. 

Так что я заметил, что если я вывезти MainBox MainBoxWindow = new MainBox();, что программа будет работать правильно. Но мне нужен этот экземпляр для вызова функции в Form1. Как я могу обойти эту проблему? Или другой способ вызова функции или для решения бесконечного цикла.

ответ

6

Ну, ваш MainBox создает ApplicationProperties, который, в свою очередь, создает MainBox, который создает ApplicationProperties, и так далее до бесконечности. Очевидно, вам нужно разбить этот цикл.

Как ваш код стоит прямо сейчас вы, вероятно, хотите, чтобы удалить new MainBox() для формы свойств и ввести его потом, например:

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

И

public partial class ApplicationProperties : Form 
{ 
    public MainBox MainBoxWindow { get; set; } 
} 
+0

Очень хорошо объясненный ответ, спасибо. Это сработало для меня отлично. –

2

Вы просто открываете один форме и он открывает еще один из его конструктора, и он снова открывает первый в конструкторе t и так далее ...

Инициализаторы полей выполнены прямо перед конструктором при создании экземпляра.

2

Класс ApplicationProperties создает объект MainBox, а ваш объект MainBox создает объект ApplicationProperties. Это цикл. Каждый вызов new - это еще один вызов конструктора в этом цикле. Конструкторы называют друг друга термином во что-то, называемом взаимной рекурсией, что приводит к переполнению стека.

2

Вы Создание MainBox Внутри ApplicationProperties и ApplicationProperties внутри MainBox этого будет держать на создание экземпляров в результате StackOverFlowException

Чтобы избежать этого, вы можете создать экземпляры в OnLoad переопределенного метода, но и создание экземпляров взаимно привязанные не имеет смысл, сделал вы хотите использовать одну и ту же ссылку?

Смежные вопросы