Example #1
0
        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();
            }
        }
Example #2
0
        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);
        }