2012-02-09 6 views
6

Ho un processo di elaborazione del tempo in DoWork del mio BackgroundWorker.Come annullare immediatamente un BackgroundWorker funzionante?

Ogni volta che provo per annullare il lavoro dalla backgroundWorker1.CancelAsync(), il backgroundWorker1.CancellationPending diventa attesa e dovrei aspettare la prossima iterazione della mia DoWork per annullare il lavoro e fare un passo fuori di esso me stesso.

C'è un modo per annullare immediatamente il lavoro dopo averlo chiamato?

+6

Controllare la cancellazionePeso più spesso? – dtb

risposta

7

No. In generale, non è possibile interrompere in modo sicuro un thread "immediatamente", perché potrebbe trattenere risorse che potrebbero fuoriuscire e, soprattutto, potrebbe trattenere i blocchi. Devi strutturare il tuo lavoratore per rispettare la bandiera di cancellazione ed uscire in sicurezza il prima possibile.