Backgroundworker+Invoke
-
Hallo zusammen,
da bin ich mal wieder
ich habe ein BGW welcher eine Methodeaufruft, welche mir wiederum etwas zurückgeben soll und da bekomme ich die lustige fehlermeldung....
Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement richTextBox1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.
Ich habe auf mehreren Seiten gelesen, dass man Invoke einsetzen soll jedoch verstehe ich dass ganze nicht...
kann mir da bitte jemand helfen ?
Danke
-
Ahja... hier der Code wo die Fehlermeldung auftaucht...
public void write_message(string value) { if (richTextBox1.Lines.Length >= 50) // Hier kommts zum Fehler { for (int i_counter = 0; i_counter < 9; i_counter++) { str_array_error[i_counter] = richTextBox1.Lines[i_counter]; } for (int i_counter = 0; i_counter < 8; i_counter++) { str_array_error[i_counter] = str_array_error[i_counter + 1]; } richTextBox1.Text = ""; foreach (string str_message in str_array_error) { richTextBox1.Text += str_message + "\n"; } richTextBox1.Text += value + "\n"; } else { richTextBox1.Text += value + "\n"; }
Danke
-
private delegate void write_message_delegate(string value); private void write_message(string value) { if (richTextBox1.InvokeRequired) { richTextBox1.Invoke(new write_message_delegate(delegate(string arg0) { write_message(arg0); }), value); } else { if (richTextBox1.Lines.Length >= 50) // Hier kommts zum Fehler { for (int i_counter = 0; i_counter < 9; i_counter++) { str_array_error[i_counter] = richTextBox1.Lines[i_counter]; } for (int i_counter = 0; i_counter < 8; i_counter++) { str_array_error[i_counter] = str_array_error[i_counter + 1]; } richTextBox1.Text = ""; foreach (string str_message in str_array_error) { richTextBox1.Text += str_message + "\n"; } richTextBox1.Text += value + "\n"; } else { richTextBox1.Text += value + "\n"; } } }
-
Hallo simon.gysi,
vielen Dank für deine antwort... ich habe es auf einem ähnlichem weg gerade gelöst bekommen.
meine Lösung :
if (richTextBox1.InvokeRequired) { SetTextCallback d = new SetTextCallback(write_message); this.Invoke(d, new object[] { value }); } else { if (richTextBox1.Lines.Length >= 10) { for (int i_counter = 0; i_counter < 9; i_counter++) { str_array_error[i_counter] = richTextBox1.Lines[i_counter]; } for (int i_counter = 0; i_counter < 8; i_counter++) { str_array_error[i_counter] = str_array_error[i_counter + 1]; } richTextBox1.Text = ""; foreach (string str_message in str_array_error) { richTextBox1.Text += str_message + "\n"; } richTextBox1.Text += value + "\n"; } else { richTextBox1.Text += value + "\n"; } }
-
Dafür gibt es doch das ReportProgress-Event.