PDA

View Full Version : [.NET - C#] Aggiornamento elementi GUI e thread


fdfdfdddd
13-07-2010, 12:59
Salve a tutti!
Ho questo piccolo problema: sono in un'applicazione WinForm semplicissima. Sul form principale c'è un bottone al cui click aggiorno il testo del bottone stesso e poi mando in esecuzione un thread secondario molto "pesante" (con un classicissimo ThreadStart ts = new ThreadStart( ... ); Thread theThread = new hread(ts); theThread.Start(); ).

Il problema è così facendo, la modifica al testo del bottone viene visualizzata solo dopo l'esecuzione del secondo thread! E l'intera GUI mi rimane non responsiva fino al termine del thread stesso.

Avete idea di come ovviare a questo problema?

Grazie 1000 anticipatamente!

Morlack`X
13-07-2010, 13:19
Dopo l'aggiornamento del testo fai processare tutti i messaggi nella coda con un bel Application.DoEvents(); e poi lancia il thread. Una cosa tipo :

Button1.Text = "Pippo";

Application.DoEvents();

Thread _t = new Thread(new ThreadStart..blablabla...



Comunque c'è qualcosa che non va perchè in teoria non dovrebbe rimanerti appesa la gui, altrimenti non avrebbe senso usare il thread.

Potresti postare il codice della funzione legata all'evento del bottone?

fdfdfdddd
13-07-2010, 13:29
Grazie mille anzi tutto!
Allora premetto: già ho migliorato la situazione utilizzato un ThreadPool piuttosto che il ThreadStart->Thread.Start()

In realtà quello che faccio nel metodo che implementa il click del bottone è banale:


labelStatus.Text = "Calculating...";

progressBar1.Maximum = pictureBox1.Width;
pictureBox1.Image = null;
progressBar1.Value = 0;

ThreadStart t1 = new ThreadStart(doWork);
Thread theThread = new Thread(t1);
theThread.Start();


evidentemente i calcoli eseguiti in doWork (il programma disegna un frattale di mandelbrot) bloccavano la GUI. Ho inserito come da te suggerito l'Application.DoEvents() nel ciclo for "principale" ed ora sembra girare molto bene.

Grazie ancora!