Обращение к форме из другого потока - C# (212400)
Формулировка задачи:
Добрый день.
Несколько дней не могу решить проблему:
Имеется форма. В ней по нажатию кнопки создается отдельный поток, совершающий вычисления.
Вот этот метод находящийся в другом классе:
ВО ВРЕМЯ вычисления данные должны выводиться в таблицу ДРУГОЙ ФОРМЫ
Этот код набросал - чтоб показать приблизительную струтуру программы.
Проблема в том, что форма с таблицей создана во втором потоке и пользователь во время этого всего процесса не может просмотреть текущую информацию - форма висит. по завершении цикла она сразу же закрывается.
не могу догнать, как не создавая форму во втором потоке, можно вызывать ее методы для вывода данных.
Надеюсь поняли суть проблемы.
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Thread newThread = new Thread(new ThreadStart(myClass.thFunc)); newThread.Start(); } }
class myClass { public static void thFunc() { //вычисления TableForm TF = new TableForm(); TF.Show(); TF.writeTable(); TF.Update(); } }
public partial class TableForm : Form { public TableForm() { InitializeComponent(); } public void writeTable() { for (int i = 0; i < 10;i++ ) { dataGridView1.Rows.Add(); dataGridView1.Rows[i].Cells[0].Value = i; dataGridView1.Update(); Thread.Sleep(1000); } } }
Решение задачи: «Обращение к форме из другого потока»
textual
Листинг программы
public partial class TableForm : Form { public TableForm() { InitializeComponent(); } private void AddDataToTable(int data) { Action addData = new Action(delegate { int index = dataGridView1.Rows.Add(); dataGridView1.Rows[index].Cells[0].Value = data; dataGridView1.Update(); }); if (!dataGridView1.InvokeRequired) addData(); else dataGridView1.Invoke(addData); } public void WriteTable() { //вообще это быстрее работает, чем если создавать новый поток ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork)); } private void DoWork(object unused) { for (int i = 0; i < 10; i++) { AddDataToTable(i); Thread.Sleep(400); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д