Переполнение стека в XmlReader C # - PullRequest
0 голосов
/ 26 февраля 2011

этот код выдает мне ошибку.Я объясняю ошибку в коде:

public partial class Util
{
    public string LoadFunctions()
    {

        string codeFunctionsString = "";

        XmlReader reader = XmlReader.Create("fname2.xml");
        //The line above throws an error:
        //"An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll"
        //The file DOES exist, so I don't know what the problem is.

        reader.Read();
        while (reader.Read())
        {

            reader.ReadToFollowing("item");
            //reader.
            codeFunctionsString += reader.Value + "|";

            Form1 win = new Form1();

            win.CodeInput.Text += reader.Value + " ";

        }
        return codeFunctionsString;
    }
}

1 Ответ

3 голосов
/ 26 февраля 2011

Основываясь на вашем ответе на мой вопрос на основе комментариев, вот что происходит.

class Form1 : Form {
    public Form1() {
        InitializeComponents();

        Util u = new Util();
        string functions = u.LoadFunctions();
    }
}

В этом случае, я предполагаю, что вызов либо в конструкторе (как указано выше), либо в Form1_Load (не показано, но та же идея).

Что происходит, когда вы вызываете LoadFunctions, он создает Form1, который вызывает LoadFunctions, который создает Form1, который вызывает LoadFunctions, который создает Form1, который вызывает LoadFunctions, который создает Form1, который вызывает LoadFunctions, который создает Form1, который вызывает LoadFunctions, который создает Form1, который - ОШИБКА: StackOverflowException

Решение состоит в том, чтобы либо не создавать форму в LoadFunctions (возможно, сделать это аргументом, который вы передаете?), Либо не вызывать LoadFunctions в Form1.

...