What you want to do, as others have hinted at, is to store the successive samples in a buffer - perhaps a circular buffer - then read those samples, asynchronously, in the UI every 100ms or so. The Progress method is never really used, because the UI and background thread are independent of one another. The only connection between the two is a buffer.

Doing the above gives you full control over the UI smoothness, the data acquisition, and keeps the CPU usage very low. It's possible that you can acquire hundreds of samples on different channels, and display all of them in smooth scrolling charts and keep CPU usage below a few percent.