doubleII - Mi 11.01.17 13:03
Titel: thread Invoke
Hallo zusammen,
ich habe folgendes Problem:
Ich erstelle eine Server-Client Verbindung.
WinForm Server
WinForm Client
ich möchte eine checkBox, die auf WinForm1 habe, nicht nur direkt aus dem WinForm Server
anhaken sondern von der WinForm Client auch steuern. Ich habe folgenden Code:
Es wird eine Verbindung erstellt und der Server wartet auf den Client.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { ReceivedDate(); }
private void ReceiveData() { if (client.Connected) while (client.Connected) { try { receive = streamReader.ReadLine(); textBox1_5.Invoke(new MethodInvoker(delegate() { textBox1_5.AppendText(receive + Environment.NewLine); })); GetCommand(receive); receive = ""; } catch (Exception ex) { MessageBox.Show(ex.ToString()); throw; } } else { textBox1_5.Text = "Connect failed!"; }
private void GetCommand(string receive) { if (receive == "grab") { checkBoxGrab.CheckState = CheckState.Checked; } else if (receive == "stop") { checkBoxGrab.CheckState = CheckState.Unchecked; } }
private void checkBoxGrab_CheckedChanged(object sender, EventArgs e) { Grab(); } |
Wenn ich das Befehl grab von Client aufrufe bekomme ich folgende
Fehlermeldung:
Zitat: |
der zugriff auf das steuerelement erfolgte von einem anderen thread |
Ich habe ins I-Net recherchiert aber komme ich noch nicht klar, wie man das Problem lösen kann. :(
Christian S. - Mi 11.01.17 13:19
doubleII hat folgendes geschrieben : |
Ich habe ins I-Net recherchiert aber komme ich noch nicht klar, wie man das Problem lösen kann. :( |
Dann frage ich mich, wie Dein bisheriger Code zustande gekommen ist, die Lösung steht da schon drin: die Invoke-Methode benutzen.