Probleme avec un Timer qui ne se lance pas ou peu

Signaler
Messages postés
24
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
10 juillet 2011
-
 Utilisateur anonyme -
Bonjour,

Du jamais vu.. Depuis des années je lance mes timers avec "MonTimer.Start()" et voici qu'aujourd'hui un timer me résiste, il ne se lance pas ou juste le temps d'une ou deux seconde et s'arrête.

Un ptit schéma :

Classe A
    Friend WithEvents CB as B
    Friend WithEvents Montimer as Timer with {.Interval = 1000}

    Sub A1()
        B.start()
    End Sub

    Sub CB_End() Handles CB.End
        ...
        MsgBox("Evenement bien déclanché") '--> Jusque la tout marche
        MonTimer.start()
    End Sub

    Sub MonTimerTick(byval ..., ...) Handles MonTimer.Tick
        MsgBox("Le Timer est bien lancé") '--> Eh bien non je n'ai rien, ou juste une msgbox et puis plus rien
    End Sub

End Classe

Classe B
    Private Thread2 as Threading.Thread
    Public Event [End]()

    Sub Start()
        Thread2 = New Thread(AdressOf B1)
        Thread2.Start()
    End Sub

    Sub B1()
        ...
        RaiseEvent [End]()
    End Sub

End Classe


Ce ne serait quand même pas un problème de thread ??

6 réponses


Salut,
Friend WithEvents Montimer as Timer with {.Interval = 1000}

Cette ligne de code ne peut pas fonctionner, il est curieux que l'ide n'est pas crié gare.
Bonne nuit.
Messages postés
24
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
10 juillet 2011

Pourquoi donc?
Le with{.Interval=1000} permet bien d'instancier cette classe en attribuant directement la valeur 1000 à la propriété interval, non? J'ai toujours fait cela en déclarant mes classes depuis le jours où j'ai su que c'était possible et je n'ai jamais eu de problèmes. C'est d'ailleurs mon avis bien le but de ce "with" qui suit la déclaration.

Après plusieurs testes, je pense que le problème vient d'une mauvaise utilisations de mes threads mais je n'en ai pas encore la certitude.

Salut,
Je maintient que ta ligne de code ne peut pas fonctionner :
Friend WithEvents Montimer as Timer with {.Interval = 1000}

Par contre, on peut écrire :
Friend WithEvents Montimer As New System.Timers.Timer(1000)


J'ai corrigé ton code et cela donne :
Option Strict On
Imports System.Threading

Class A
    Friend WithEvents CB As New B
    Friend WithEvents Montimer As New System.Timers.Timer(5000)

    Sub A1()
        CB.Start()
    End Sub

    Sub CB_End() Handles CB.End

        MsgBox("Evenement bien déclanché") '--> Jusque la tout marche
        Montimer.Start()
    End Sub

    Sub MonTimerTick(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Montimer.Elapsed
        MsgBox("Le Timer est bien lancé") '--> Eh bien non je n'ai rien, ou juste une msgbox et puis plus rien
    End Sub

End Class

Class B
    Private Thread2 As Threading.Thread
    Public Event [End]()

    Sub Start()
        Thread2 = New Thread(AddressOf B1)
        Thread2.Start()
    End Sub

    Sub B1()

        RaiseEvent [End]()
    End Sub

End Class

Bonne journée.
Messages postés
24
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
10 juillet 2011

Oui d'accord mais là j'avais écrit rapidement et manuellement le code dans mon post, ce n'était pas un copier-coller, la preuve j'ai même écrit "Classe" au lieu de "Class"!
Enfin je pense que si l'espace de noms System.Windows.Forms est importé l'écriture "... as Timer" ne devrait pas poser de problèmes.

Je maintiens que ça devait être une erreur inter-thread. J'ai oublié avoir mis false à la propriété checkforillegalcrossthread ou quelque chose comme ça, ce qui après correction me donne soit une erreur soit l'arrêt du programme. Pourtant les évènements devrait être indépendants des threads non?
Messages postés
24
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
10 juillet 2011

Je viens seulement de voir que tu faisais allusion à "New", c'est vrai que dans ce cas mon écriture était fausse mais le "new" était bien dans le code, j'imagine que j'aurait eu une erreur comme "objet non définit" sinon.

Bonsoir,
L'essentiel c'est que tu t'en sorte dans ton projet.
Juste une petite précision à apporter :
Il y a une classe Timer dans l'espace de noms System.Windows.Forms qui fait office de composant.
Et une autre classe Timer dans l'espace de noms System.Timers
Peut-être faisais-tu l'amalgame entre les deux ?
Bonne soirée et à bientôt.