Benutzer mit den meisten Antworten
Textbox während dateieinlesung befüllen

Frage
-
Hallo, ich habe ein kleines GUI Programmert, welches anfangs Diverse Dateien einliest.
Nun möchte ich gerne, dass während des Einlesens eine Textbox ausgibt, was gerade eingelesen wird. wenn ich allerdings textbox.text = .... eingebe, dann erscheint dieser text imer erst, wenn das einlesen der kopletten daten erledigt ist, also zwischedurch pasiert an der textbox garnichts.
Kann mir da jemand weiter helfen?
Antworten
-
Hallo,
das einlesen musst du in einen 2. Thread verschieben. Stichwort BackgroundWorker. Somit wird sich die GUI auch aktualisieren wenn du den Text zuweist. Dafür brauchst du die Methode BeginInvoke:
public Form1() { InitializeComponent(); bw.DoWork += bw_DoWork; } void bw_DoWork(object sender, DoWorkEventArgs e) { this.BeginInvoke(new UpdateDelegate(() => { textBox1.Text = "Hello World!"; })); } BackgroundWorker bw = new BackgroundWorker(); delegate void UpdateDelegate(); private void button1_Click(object sender, EventArgs e) { bw.RunWorkerAsync(); }
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets- Als Antwort vorgeschlagen Stefan FalzModerator Dienstag, 26. März 2013 07:10
- Als Antwort markiert Ionut Duma Donnerstag, 28. März 2013 14:55
Alle Antworten
-
Hallo,
das einlesen musst du in einen 2. Thread verschieben. Stichwort BackgroundWorker. Somit wird sich die GUI auch aktualisieren wenn du den Text zuweist. Dafür brauchst du die Methode BeginInvoke:
public Form1() { InitializeComponent(); bw.DoWork += bw_DoWork; } void bw_DoWork(object sender, DoWorkEventArgs e) { this.BeginInvoke(new UpdateDelegate(() => { textBox1.Text = "Hello World!"; })); } BackgroundWorker bw = new BackgroundWorker(); delegate void UpdateDelegate(); private void button1_Click(object sender, EventArgs e) { bw.RunWorkerAsync(); }
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets- Als Antwort vorgeschlagen Stefan FalzModerator Dienstag, 26. März 2013 07:10
- Als Antwort markiert Ionut Duma Donnerstag, 28. März 2013 14:55
-
-
Hi,
der BackgroundWorker bietet einen event an -> "ProgressChanged" (WorkerReportsProgress auf true setzen) und aus dem DoWork dann aufrufen mit ReportProgress, wenn Du texte ausgeben möchtest mittels des overloads das ein userState object als parameter nutzt:
http://msdn.microsoft.com/de-de/library/a3zbdb1t.aspx
Viele Grüße,
Thorsten