Vb.NET CF - Utilizzare Timers correttamente

lunedì 20 giugno 2011 - 03.39

klode Profilo | Newbie

Salve,
sto sviluppando un applicativo in VB.NET per il mio palmare. In sostanza ho 2 timer (non legati a Form, ma creati via codice) i quali, in base ad un periodo impostato dall'utente, il primo timer dura il periodo meno un minuto, il secondo parte allo scadere del primo e dura un minuto. Quest'ultimo allo scadere,fa ripartire il primo timer, e così via.

Ora, il problema è che non so come... ma la call sul Timer_onTick viene eseguito più volte. Non capisco perchè.

A qualcuno è mai capitato?

PS: accendo e spengo i timer cambiando semplicemente il flag Enabled da true a false. Basta questo? E il metodo Dispose() a che serve?

Grazie per il vostro prezioso aiuto.

Mastericarus333 Profilo | Newbie

>Salve,

>Ora, il problema è che non so come... ma la call sul Timer_onTick
>viene eseguito più volte. Non capisco perchè.
i due timer come li hai chiamati?
Timer_onTick di quale dei due timer?

>PS: accendo e spengo i timer cambiando semplicemente il flag
>Enabled da true a false. Basta questo? E il metodo Dispose()
>a che serve?
provato x stoppare e riavviare i timer il metodo start e stop dei due oggetti timer?

>Grazie per il vostro prezioso aiuto.

klode Profilo | Newbie

Scusate per il ritardo, ma sapete, il lavoro......

Dunque, il primo timer l'ho chiamato intervalTimer, il secondo runTimer. Poichè si parla Compact Framework, il metodo Start e Stop non sono contemplati nei System.Windows.Forms.Timer

L'evento _Tick dei timer li associo così:

AddHandler intervalTimer.Tick, AddressOf startRunTimer

dove startRunTimer è una Sub che mi interrompe intervalTimer (intervalTimer.Enabled = false) e dove imposto l'intervallo per il timer runTimer, dove anche qui ho il comando simile:

AddHandler runTimer.Tick, AddressOf EventLogApp

in quest'ultima Sub, EventLogApp disabilita il timer runTimer, per abilitare di nuovo il timer intervalTimer e così via.

Il problema è che a seguito dell'esecuzione della sub EventLogApp (al termine del timer runTimer) vengono eseguiti più volte gli Handler (2,3,4 volte... e in crescita): mi spiego, al termine di runTimer viene eseguito per la prima volta EventLogApp, il quale abilita intervalTimer. startRunTimer viene eseguito 2 volte! a questo punto mi ritrovo 3 volte eseguita la sub EventLogApp, il quale mi va ad eseguire 4 volte startRunTimer, e così via!

Ma non capisco perchè............

Spero possiate darmi un aiutino........................... grazie mille.

Mastericarus333 Profilo | Newbie

io ho provato a generare due timer come dici tu uno di 5 secondi ed uno di 2 e si scambiano vicendevolmente senza problemi (Solitamente non ho mai usato il timer in questo modo ma con il controllo timer)
Dovresti incollare il codice dei due sub a cui vengono reindirizzati i tick cosi da poter verificare insieme dove sia l'inghippo.

Vinsent Profilo | Senior Member

Anche secondo me dovresti mostrare un pò di codice e, se vuoi, indicare cosa vuoi fare, magari si riesce a capire dove si trova il problema o trovare una soluzione più semplice per fare la stessa cosa...
Comunque, ho provato con VS2010 e il framework 4, più che altro per vedere come funziona AddHandler/AddressOf...sono abbastanza autodidatta...è sembra che vada tutto liscio, il codice è alla fine del post.
Dispose "distrugge" gli oggetti o meglio libera le risorse occupate dall' oggetto, se crei una form con un button e il codice:
Public Class Form1 Private Sub Button1_Click() Handles Button1.Click Me.Dispose() End Sub End Class
il form si chiude...

Codice dei timer, non ho commentato perchè mi sembra abbastanza semplice:
Dim timer1 As New Timer Dim timer2 As New Timer Dim timer3 As New Timer Dim a As String Private Sub Button1_Click() Handles Button1.Click a = "" timer1.Interval = 2000 timer2.Interval = 5000 timer3.Interval = 60000 timer1.Enabled = True timer3.Enabled = True AddHandler timer1.Tick, AddressOf timer1_Tick AddHandler timer2.Tick, AddressOf Timer2_Tick AddHandler timer3.Tick, AddressOf Timer3_Tick End Sub Private Sub timer1_Tick() timer1.Enabled = False timer2.Enabled = True a = a & "timer1" & vbCrLf End Sub Private Sub Timer2_Tick() timer1.Enabled = True timer2.Enabled = False a = a & "timer2" & vbCrLf End Sub Private Sub Timer3_Tick() timer1.Enabled = False timer2.Enabled = False timer3.Enabled = False a = a & "timer3" & vbCrLf timer1.Dispose() timer2.Dispose() timer3.Dispose() MessageBox.Show(a, "", MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5