private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { Automobile auto = (Automobile)e.UserState; //finché viene chiamato il progress changed (ovvero finché si è nel while) if (e.ProgressPercentage != -1) { //muovo l'auto auto.Muovi(); } }
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker bgw = (BackgroundWorker)sender; Automobile auto = (Automobile)e.Argument; //finché una delle due auto non vince while (!(auto_rossa.Vittoria || auto_nera.Vittoria)) { if (bgw.CancellationPending) { //se viene premuto il pulsante stop e.Result = (false, auto); return; } else { int spostamento = rnd.Next(1, 11); //muovo l'auto auto.Posizione += spostamento; //mando al progress changed la posizione che l'auto deve avere bgw.ReportProgress(auto.Posizione, auto); Thread.Sleep(50); } } if (auto_rossa.Vittoria && auto_nera.Vittoria) { //se le auto pareggiano cancello uno dei due bgw backgroundWorker_N.CancelAsync(); } //il bgw cancellato if (bgw.CancellationPending) { //chiama il pareggio Pareggio(); //e ritorna falso e.Result = (false, auto); return; } //se non ci sono pareggi o cancellazioni, ritorno vero e.Result = (true, auto); }