Исключение бесконечного цикла Windows Forms
Я быстро сделал проект Windows Forms, который загружает графический интерфейс различных текстовых полей с плавающими значениями. Некоторые из них уже имеют инициализированное значение. Все текстовые поля должны быть обновлены после изменения одного из них.
public Form1()
{
InitializeComponent();
initializeValues();
calculateValues();
}
public void initializeValues()
{
//textboxes are filled/initialized with default float values
}
public void calculateValues()
{
//here all textboxes are new calculated and updated
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
calculateValues();
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
calculateValues();
}
Проблема: Когда я выполняю этот проект, он генерирует исключение StackruException, которое не обрабатывается (бесконечный цикл или бесконечная рекурсия). Я думаю, это потому, что во время calculateValues()
Метод текст textBoxes будет изменен, а затем активируются обработчики событий. Это бесконечный цикл:-(
Как мне изменить мой код, описанный выше, чтобы избежать этого?
Благодарю.
2 ответа
Вы не должны использовать и вызывать "initializeValues ();" (причина бесконечного цикла).
Первым решением может быть помещение значения инициализации TextBox в InitializeComponent:
MyTextBox.Text = myInitValue;
Я решил проблему, изменив событие на "KeyPress". В этом случае событие не активируется самим методом. Больше нет бесконечных петель. Установка точек останова и пошаговое выполнение помогли мне понять "поток". Спасибо CodeCaster.