Rallentare la ProgressBar

di il
16 risposte

16 Risposte - Pagina 2

  • Re: Rallentare la ProgressBar

    Anche se AntoAnto, non ha fatto sapere, un mio contributo che simula l'effetto condensatore elettrolitico.

    Nel form vanno inserite tre progressbar
    
    Public Class Form1
    
        Dim rnd = New Random(Now.Millisecond)
        Dim WithEvents Timer1 As New Timer
        Dim valore As Integer
        Dim Valori(9) As Integer ' buffer da 10 posti
        Dim ValoriIdx As Integer = 0
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            ProgressBar1.Minimum = 0
            ProgressBar1.Maximum = 200
            ProgressBar2.Minimum = 0
            ProgressBar2.Maximum = 200
            ProgressBar3.Minimum = 0
            ProgressBar3.Maximum = 200
    
            Timer1.Interval = 100 ' variare per il miglior effetto
            Timer1.Enabled = True
    
            ' Thread separato per generazione random
            Dim vThread As New System.Threading.Thread(AddressOf valorerandom)
            vThread.Start()
        End Sub
    
        ' lettura ciclica della variabile valore
        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            ' Per fare In modo che tutte le barre lavorino con lo stesso valore
            ' salvo valore in comune.
            ' Perché valore viene aggiornato da un thread separato.
            ' non servirà nel programma definitivo, dove ci sarà una barra unica
            Dim comune As Integer = valore
            ProgressBar1.Value = comune ' PICCHI
            ProgressBar2.Value = MediaValore(comune) ' MEDIA
            ' effetto elettrolitico ------------------------
            If ProgressBar3.Value > comune Then
                Dim scarica As Integer = 6 ' 6 determina la scarica,
                ' un valore più alto, scarica più veloce
                ' il valore va tararo in rapporto a Timer1.Interval
                ProgressBar3.Value -= scarica
            Else
                ProgressBar3.Value = comune
            End If
            '-----------------------------------------------
        End Sub
    
        ' codice calcolo media SirJo, Weierstrass
        Private Function MediaValore(ByVal num As Integer) As Integer
            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
    
        ' simula un device su thread indipendente che spara dati sulla variabile valore
        Private Sub valorerandom()
            Do
                valore = rnd.Next(0, 201) ' numero casuale da 0 a 200
                System.Threading.Thread.Sleep(250) ' un valore ogni 250ms
            Loop
        End Sub
    
        ' chiude tutti i thread alla chiusura del form
        Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
            End
        End Sub
    End Class
    

    ProgressBar.gif
    ProgressBar.gif

  • Re: Rallentare la ProgressBar

    Bentornato Rubik
Devi accedere o registrarti per scrivere nel forum
16 risposte