I have a method processData() that takes a large amount of data and does some work on it. There’s a start button that initiates the processing. I need a cancel button that stops the processing wherever it’s at. How can I implement something like that? The thing I don’t get is how to make the cancel button usable once the processing has started since the rest of the UI is frozen when the function is running.
Share
BackgroundWorker.CancelAsync Method is what you need. Here is a good example for you.
If you have got a time consuming process you will have to use a separate thread to handle that in order to support for cancellation. If you execute that time consuming process in the main thread(UI thread) it will be busy and won’t take your cancellation request in to account until it finish that task. That’s why you experience UI freezing.
If you use a backgroundWorker for your time consuming task and if you check the CancellationPending flag in the BackgroundWorker.DoWork method you could achieve what you want.