preoparazione inziaile:
esempio: attivo processo se non già attivo
if (bwBackup.IsBusy != true)se non é già in azione
{
bwBackup.RunWorkerAsync(); inizia il processo _DoWork in background}
esempio: cancello il porcesso dopo il controllo se cancellabile
if (bwBackup.WorkerSupportsCancellation == true)se il processo é cancellabile
{
bwBackup.CancelAsync(); gli modifico il parametro .CancellationPending in true}
esecuzione codice e gestione eventi
vanno creati degli eventi che gestiscono il processo in background
esempio: creo una routine in background di un conteggio da 10 a 100
private void bwBackup_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker; creo una sessione del tipo sender passato come argomento}
for (int i = 1; i <= 10; i++)
{if (worker.CancellationPending == true) si controlla lo stato del .CancellationPending per determinare se l'oggetto passato sender era cancellato, quindi una richiesta di cancellazione}
{e.Cancel = true; importo quindi al DoWorkEventArgs come cancellato e chiudo il ciclo, questo sarà passato come parametro nel RunWorkerCompleted indicato lo stato di cancellazione}
break;
else
{System.Threading.Thread.Sleep(500); temporizzazione del processo per rallentarlo}
worker.ReportProgress(i * 10); richiamo l'evento ProgressChanged passando il risultato della moltiplicazione
esempio: scrivo una lable con i dati passati
private void bwBackup_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.lable.Text = (e.ProgressPercentage.ToString());}
esempio:
private void bwBackup_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if ((e.Cancelled == true)) verifica se il processo é stato cancellato}
{this.tbProgress.Text = "Canceled!";}
else if (!(e.Error == null)) verifica se non ci sono stati errori
{this.tbProgress.Text = ("Error: " + e.Error.Message);}
else
{this.tbProgress.Text = "Done!";}