Создание экземпляра класса вызывает переполнение стека
Я пытаюсь создать решение, которое позволит потоку обновлять свойства WinForm (текстовое поле) при обработке данных в фоновом режиме. Я собрал" примерный " проект, который запускает поток для обновления WinForm во время работы основной программы.
Вот основная форма класса:
namespace Thread_Test_Sending_Data_to_Thread_Function { public partial class Form1 : Form { public Form1() { int i; InitializeComponent(); FormData FormData1 = new FormData(); Thread1 MyThread = new Thread1(); for (i=0; i<10; i++) { FormData1.Label1Data = i; FormData1.Label1Data = i * 10; Thread WriteScreen = new Thread(delegate () { MyThread.FormWriteMethod(FormData1); }); WriteScreen.Start(); Thread.Sleep(1000); } }
а вот и класс thread
namespace Thread_Test_Sending_Data_to_Thread_Function { public class Thread1 : Form1 { private delegate void SetLabelTextDelegate(FormData InputClass); public void FormWriteMethod(FormData InputClass) { if (TestLabel1.InvokeRequired) { TestLabel1.BeginInvoke(new SetLabelTextDelegate(FormWriteMethod), new object[] { InputClass }); return; } TestLabel1.Text = InputClass.Label1Data.ToString(); TestLabel2.Text = InputClass.Label2Data.ToString(); } } }
Все строится нормально. Я полагаю, что настроил это так, чтобы позволить мне отправить ссылку на класс FormData в поток. FormData загружается основной программой формы,которая затем вызывает выполнение потока. Он делает паузу для завершения потока, а затем обновляет данные формы. Поток унаследовал Form1, поэтому он должен иметь доступ к текстовому полю TestLable1, определенному в Form1
Когда я пытаюсь запустить программу, программа попадает в оператор Thread1 MyThread = new Thread (); а затем возвращается к началу программы до тех пор, пока не произойдет переполнение стека. Должно быть, я упускаю что-то простое. Есть предложения?
Что я уже пробовал:
Я рассмотрел множество примеров того, как отправлять данные в поток и как получить доступ к данным WinForm из потока. Из того, что я обнаружил, то, что я делаю, кажется правильным. Не уверен, что следует попробовать в следующем.
Mehdi Gholam
Почему нитки?