I found this neat example for this using the Skip / Take methods. Basically you load x the number of records in each round that you Skip in the next round, and calculate this from the sum of all the data in your table, which allows you to update the progress bar every round.
Take a look at this:
List<MyDataTable> someData = new List<MyDataTable>(); int rowCount = dt.myDataTable.Count();
source share