Ich habe eine Konsolenanwendung, die eine Formularanwendung (aus einer anderen Klasse) in einem anderen Thread startet.Zugriff auf "RichTextBox" -Komponente von einem anderen Thread
Aber dann möchte ich auf die richTextBox1
Komponente von meiner Hauptklasse, im Hauptthread zugreifen und das wirft einen Fehler, der sagt, dass ich versuche, auf die Komponente von einem anderen Thread zuzugreifen.
Mein Code: (Form-Anwendung)
public partial class ChatGui : Form
{
public static RichTextBox textBox;
public ChatGui()
{
InitializeComponent();
richTextBox1.ReadOnly = true;
richTextBox1.BackColor = SystemColors.Window;
}
public void WriteLine(string line)
{
richTextBox1.Text += line+"\r\n";
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
WriteLine("[You]: "+textBox1.Text);
NetworkManager.SendPacket("rchat_msg " + textBox1.Text.Replace(" ", "%20"));
textBox1.Text = "";
e.Handled = true;
}
}
public void Exit()
{
Application.Exit();
}
private void ChatGui_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
}
Die Hauptkonsolenanwendung
public static void StartRemoteChat()
{
RemoteChat = true;
Program.ChatGui = new ChatGui();
new Thread(new ThreadStart(() =>
{
Application.Run(Program.ChatGui);
while (RemoteChat)
{
// ...
}
})).Start();
}
Also, wie kann ich die richTextBox1
Komponente von meinem Haupt-Thread Zugriff (ich einige Variablen ändern wollen der Komponente) ohne dass dieser Fehler passiert?
Auf einer Seite zur Kenntnis, 'Anwendung. Run() 'ist ein ** blockierender ** Anruf. Deine 'while (RemoteChat)' - Schleife wird ** nicht ** berührt, bis das Chat-Formular geschlossen ist **! –
@Idle_Mind oh, du hast Recht! Vielen Dank ! –