2013-07-29 9 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. 

형식 2 :

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

당신은 당신이 OnLoad 오버라이드 (override) 방식으로 인스턴스를 만들 수있는이 문제를 방지하려면

StackOverFlowException을 결과로 생성 인스턴스에 계속됩니다 MainBox이 내부 ApplicationProperties 내부 MainBoxApplicationProperties을 생성하지만, 상호 이해했던하지 않습니다 묶여 인스턴스를 만들 동일한 참조를 사용한다는 의미입니까?

관련 문제