У меня есть 2 формы: Form1 и Form2.Передача переменных между 2 формами, многопоточность C#
Форма 1 содержит кнопку вызова Form2 и запускает ее на другой поток.
Form2 содержит 3 флажка. Когда пользователь нажимает кнопку «Добавить», он генерирует строку.
Мой вопрос: как передать строку в Form1, а затем добавить ее в richtextbox?
Спасибо.
Form1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace PassingData2Forms
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void call_form_2()
{
for (int i = 0; i<10; i++) {
Form2 inst_form2 = new Form2();
inst_form2.ShowDialog();
}
}
private void f1_but_01_Click(object sender, EventArgs e)
{
Thread extra_thread_01 = new Thread(() => call_form_2());
extra_thread_01.Start();
}
}
}
Form2
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PassingData2Forms
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
private string clean_string(string process_string)
{
process_string = process_string.Replace(",,", ",");
process_string = process_string.Trim(new char[] {','});
return process_string;
}
private void button1_Click(object sender, EventArgs e)
{
string[] selected_array = new string[3];
if (checkBox1.Checked == true)
{
selected_array[0] = "Summer";
}
if (checkBox2.Checked == true)
{
selected_array[1] = "Spring";
}
if (checkBox3.Checked == true)
{
selected_array[2] = "Fall";
}
string selected_string = clean_string(string.Join(",", selected_array));
//---------------------------------------------------------------
// How can I pass "selected_string" to RichTextBox in Form1 here?
//---------------------------------------------------------------
Close();
}
}
}
Можете ли вы объяснить, почему вы пытаетесь запустить свою вторую форму в другой теме? – Steve
@Steve Поскольку это всего лишь образец, я попытался сделать это максимально простым. У меня тяжелая задача, которая требует много времени для обработки и должна выполняться в другом потоке, чтобы избежать замораживания графического интерфейса. Если я смогу найти решение для этого примера, я могу применить его в своем реальном приложении. –
Является ли Form2 обязательной формой или просто фоновой нитью? См. Http://stackoverflow.com/questions/661561/how-to-update-the-gui-from-another-thread-in-c –