Ich habe 2 Formulare: Form1 und Form2.Übergabe von Variablen zwischen 2 Formen, Multithreading C#
Form1 enthält eine Schaltfläche, um Form2 aufzurufen und es auf einem anderen Thread auszuführen.
Form2 enthält 3 Kontrollkästchen. Wenn ein Benutzer auf die Schaltfläche Hinzufügen klickt, wird eine Zeichenfolge generiert.
Meine Frage ist, wie kann ich die Zeichenfolge an Form1 übergeben und dann in die Richtextbox hinzufügen?
Danke.
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();
}
}
}
Können Sie erklären, warum Sie versuchen, Ihre zweite Form in einem anderen Thread auszuführen? – Steve
@Steve Da dies nur ein Beispiel ist, habe ich versucht, dies so einfach wie möglich zu machen. Ich habe eine schwere Aufgabe, die viel Zeit benötigt, um verarbeitet zu werden, und muss auf einem anderen Thread ausgeführt werden, um das Einfrieren der GUI zu vermeiden. Wenn ich eine Lösung für dieses Beispiel finden kann, kann ich es in meiner echten App anwenden. –
Ist Form2 notwendigerweise eine Form oder nur ein Hintergrund-Thread? Siehe http://stackoverflow.com/questions/661561/how-to-update-the-gui-from-another-thread-in-c –