Parce qu’il ne sait pas combien de temps dure l'opération, en quelque sorte tu dois le calculer toi-même.
Admettons que tu veuilles lires les bits d'un fichier, tu as par exemple ce moyen-là, qui représente un peu ce que tu nous montres :
byte[] b = File.ReadAllBytes("blabla.txt");
Dans ce cas-là tu ne sais pas où ça en est de la progression, tu n'as rien qui te permet de le savoir.
Un autre moyen serai que tu développes-toi même une fonction qui lit progressivement le fichier, par exemple avec une boucle for.
Par exemple un fichier de 400 bits, tu vas faire une boucle qui va lire, disons 20 bits par itération.
Chaque fois que tu vas passer dans la boucle tu auras donc lu 5% du fichier.
Donc à chaque passage dans la boucle, tu appelles une fonction UpdateProgressBar(int percent).
Attention cependant aux mises à jour d'UI cross-thread.