Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    VS 2012 decrementare intervallo timer

    Salve a tutti,
    sto imparando a usare Visual Studio Express 2012 e mi sono imbattuto in un problema:

    Ho capito che un elemento Timer ha una proprietà Intervallo che serve appunto a stabilire l'intervallo dopo cui si ripete un qualcosa.

    Imposto l'intervallo a 25 e desidero che a ogni "tick" venga decrementato di 1.

    Nel codice ho provato a scrivere questo:

    codice:
    If (Timer.Interval > 1) Then 
    Timer.Interval = Timer.Interval - 1 
    End If
    Me lo fa passare come giusto ma allo scadere del primo tick l'intervallo mi passa direttamente a 1

    Sapete indicarmi un modo efficace per svolgere questa operazione?

  2. #2
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Succede perchè quando setti Timer.Interval questo resetta il timer.
    Quindi continua a resettarsi e partire, scatenando l'evento tick fino a quando non arriva a 1.

  3. #3
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Originariamente inviato da URANIO
    Succede perchè quando setti Timer.Interval questo resetta il timer.
    Quindi continua a resettarsi e partire, scatenando l'evento tick fino a quando non arriva a 1.
    Sei sicuro?
    Secondo me è solo un problema di "tempo" nel senso che Interval è espresso in millisecondi, quindi da 25ms a "scendere" non è che ci sia tanto tempo per accorgersi di quello accade...in pratica è un battito di ciglia.
    Esempio con due Timer e due Label, il primo decrementa il suo Interval mentre il secondo una variabile, i due valori sono visualizzati dalle Label, Interval è settato su 2 secondi e il decremento su 50ms:
    codice:
    Public Class Form1
    
        Dim contatore_T2 As Integer
    
        Private Sub Form1_Load() Handles MyBase.Load
            Timer1.Interval = 2000
            Timer2.Interval = 2000
            contatore_T2 = 2000
        End Sub
    
        Private Sub Button1_Click() Handles Button1.Click
            Timer1.Start()
            Timer2.Start()
        End Sub
    
        Private Sub Timer1_Tick() Handles Timer1.Tick
            If (Timer1.Interval = 50) Then
                Timer1.Stop()
                Timer2.Stop()
                Label1.Text = "T1= stop"
            Else
                Timer1.Interval = Timer1.Interval - 50
                Label1.Text = "T1= " & Timer1.Interval
            End If
        End Sub
    
        Private Sub Timer2_Tick() Handles Timer2.Tick
            contatore_T2 -= 50
            Label2.Text = "T2= " & contatore_T2
        End Sub
    End Class

  4. #4
    Ho motivo di credere che l'intervallo passa istantaneamente a 1 perché ho modificato l'intervallo a 24 poi a 23 poi a 22 e cosi via prima di far partire il programma e ho notato che la velocità tra 25 e 24 è quasi la stessa. quindi non sta qui il problema.

    uranio sapresti suggerirmi un metodo efficacie per decrementare il mio intervallo di 1 ogni tick?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A parte ogni considerazione sul codice, Windows non tratta efficacemente intervalli sotto 15 o 16 millisecondi con i comuni timer. E in ogni caso, gestire variazioni di 1 ms con i timer normali non penso proprio possa essere "apprezzato" in un programma.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Un dubbio....
    quando si richiama Private Sub Timer1_Tick() e si reimposta il timer, non è già ripartito il countdown del timer ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.