Eccoti del codice semplice semplice per darti modo di studiarlo, capirlo, e modificarlo.
Crea un form e mettici dentro una progress bar, poi copia-incolla questo codice e mandalo in esecuzione.
Il programma genera dei numeri casuali da 0 a 200 e li mostra nella progressbar che ovviamente sarà "a scatti".
Poi, sulla routine MediaValore, togli la riga "Return num" e mandalo in esecuzione di nuovo, vedrai la progress bar molto più rallentata.
Il programma tiene conto delle ultime 10 letture (ma puoi modificarlo come vuoi tu) con un buffer circolare
Prova e facci sapere
Sergio
Dim Valori(9) As Integer ' buffer da 10 posti
Dim ValoriIdx As Integer = 0
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = 200
Dim rnd = New Random
For x = 1 To 100
Dim num = rnd.Next(0, 201) ' numero casuale da 0 a 200
ProgressBar1.Value = MediaValore(num)
Application.DoEvents()
Threading.Thread.Sleep(80)
Application.DoEvents()
Next
Me.Dispose()
End Sub
Private Function MediaValore(ByVal num As Integer) As Integer
Return num ' <<< linea da disabilitare
Valori(ValoriIdx) = num ' memorizza il valore nel buffer
ValoriIdx += 1 ' avanza il puntatore
If ValoriIdx = 10 Then ValoriIdx = 0 ' riporta il puntatore all'inizio
' calcola la media
Dim somma As Integer = 0
For Each valore In Valori
somma += valore
Next
Return CInt(somma / Valori.Length)
End Function
Per calcolare la media si poteva anche usare una sola linea di codice sfruttando il Linq, ma così hai qualcosa in più da studiare