PDA

View Full Version : [C#] Attendere fine del backgroundWorker prima di proseguire con il resto


gremodic
31-10-2011, 12:13
Salve a tutti,
avrei bissogno di un aiuto, in pratica io ho fatto la mia bella applicazione che gli dò una singola cartella e lui mi fà tutte le operazioni tranquillamente, adesso volevo fare una funzione che mi ripetesse quello che faccio per 1 singola cartella, per tutte le cartelle contenute in una root. A tale scopo avevo fatto la seguente funzione:




private void RepeatForAll()
{
string root = BkPath;
foreach (string SinglePath in Directory.GetDirectories(root))
{
//while (backgroundWorker1.IsBusy == true) { }
BkPath = SinglePath;
textBox1.Text = SinglePath;

button1.PerformClick();
}




Praticamente secondo la mia idea, aggiornavo semplicemente il path ed effettuavo quello che facevo prima con una singola cartella col button 1.
Adesso il problema sta nel fatto che fra le mille e mille operazioni che poi richiamerà il button 1, c'è un BackgroundWorker che prima premendo solo button1 funzionava perfettamente, adesso probabilmente colpevole la velocità di esecuzione della premuta ripetuta di questo button1 il BackGroundWorker non riesce a completare le operazioni e conseguentemente tutto il programma mi và in errore. Ho provato con quello che vedete nel commento ma non risolve, ho messo dei treadh.sleep ma non funzionano neanche. Potete darmi una soluzione? Grazie a tutti
P.S. intendo una soluzione modificando questo pezzetto di codice, penso che se aggiungo il ciclo for each all'interno del button1 includendo tutte le istruzioni del programma probabilmente non avrò lo stesso problema.

SerMagnus
31-10-2011, 13:08
per queste cose c'è sempre in aiuto la documentazione: http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

Devi utilizzare l'evento RunWorkerCompleted

gremodic
31-10-2011, 17:24
Ok sono un pò confuso sull'utilizzo di questo evento RunWorkerCompleted, il mio dubbio pricnipale e su quali parametri gli devo passare

backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

quando richiamo nel corpo del programma questo evento, vuole inviato un sender e un RunWorkerCompletedEventArgs e.
Ma nello specifico cosa significa esattamente, cosa dovrei passargli?

SerMagnus
02-11-2011, 10:28
è un evento come gli altri. ti consiglio di leggerti qualche tutorial sulla gestione degli eventi, basta una rapida googlata e ti sarà tutto più chiaro ;)