Ich habe 2 Formulare auf verschiedenen Threads ausgeführt. Form2 generiert eine Zeichenfolge, sendet sie an form1 zurück und aktualisiert die richtextbox in form1. Ich habe den Code von meinem Freund bekommen, aber ich verstehe einen Teil davon nicht.C# Fragen zu Invoke, Invereequired & Multithreading
Könnten Sie mir bitte erklären, warum brauchen wir die Bedingung:
if (this.f1_rtb_01.InvokeRequired) { }
Und was 2 Zeilen unten tun?
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
Voll-Code 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();
}
public string str_1;
private void call_form_2()
{
for (int i = 0; i < 10; i++)
{
Form2 inst_form2 = new Form2();
inst_form2.ShowDialog();
string result = inst_form2.SelectedString;
this.SetText(result);
}
}
delegate void SetTextCallback(string text);
private void SetText(string text)
{
if (this.f1_rtb_01.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
if (text != "")
{
this.f1_rtb_01.AppendText(text + Environment.NewLine);
}
else
{
this.f1_rtb_01.AppendText("N/A" + Environment.NewLine);
}
}
}
private void f1_but_01_Click(object sender, EventArgs e)
{
Thread extra_thread_01 = new Thread(() => call_form_2());
extra_thread_01.Start();
}
}
}
Warum führen Sie zwei Formulare auf zwei Threads aus? –