IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Timer en minute aver un DateTimeCompare ne fonctionne pas


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut Timer en minute aver un DateTimeCompare ne fonctionne pas
    Bonsoir,

    je dois réaliser une action 5 minutes après que l'utilisateur est cliquer sur un bouton mais cela ne fonctionne pas, voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Public dateStop_buzzer As DateTime 
     
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    dateStop_buzzer = Now.AddMinutes(5)
    relais_K6()
    les_try("buzzer interne :: MISE EN MARCHE A " & Now.ToString & " ARRET DEFINI A " & dateStop_buzzer.ToString)
    Tr_K6.Interval = 1000 'on parcours tout les secondes pour voir si on a l'heure additionner au 4 min pour arreter le buzzer
    Tr_K6.Start()
    End sub
    Ensuite dans le timer je balaye tout les secondes pour voir si l'heure actuel est égal a dateStop_buzzer alors je déclenche ma procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Tr_K6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tr_K6.Tick
            If DateTime.Compare(dateStop_buzzer, Now) = 0 Then
                'relais_K6()
                les_try("buzzer interne :: ARRET DU BUZZER A " & Now.ToString)
                Tr_K6.Stop()
            End If
        End Sub
    au final en debugant je ne rentre jamais dans la boucle !
    la procédure les_try écrit dans un fichier texte est je vois bien en ouvrant celui ci que j'ai écrit l'heure de déclenchement et l'heure d’arrêt défini à m+4
    mais ça ne fonctionne pas !

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateTime.Compare(dateStop_buzzer, Now)=0
    Dans cette comparaison, "=0" indique l'égalité parfaite des DateTime, ce qui a quasiment aucune chance de se produire.
    Donc à remplacer par ">0".
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    ca ne fonctionne pas non plus je ne rentre jamais dans le if du timer !

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour
    msdn : DateTime.Compare
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            'Inférieur à zéro si t1 est antérieur à t2. ----- Ne sera donc vrai que lorsque les 5 minutes seront passées 
            If DateTime.Compare(dateStop_buzzer, Now) < 0 Then
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    Incroyable mais ca ne fonctionne pas, en déboguant je m’aperçois que je ne rentre jamais dans le timer (sans la condition du datediff)
    Peu etre que ceci est du au fait que j'ai fait les modifications suivantes :

    1. le timer est déclenché depuis une procédure qui est lancé dans un thread, et le timer se trouve dans une autre fenêtre que la ou le thread est appelé ?


    Voici le code épuré avec ce qui nous intéresse :

    dans la frm_main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    'déclenché par l'utilisateur au clic d'un bouton
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
            _threadMail = New Thread(New ThreadStart(AddressOf traitement_ticket))
            _threadMail.Name = "Thread1"
            _threadMail.Start()
    End Sub
     
    Public Sub traitement_ticket()
    'code avant et aprés 
    Mise_en_marche_relais()
    End Sub
    ensuite dans mon module Relais j'ai ma fonction Mise_en_marche_relais() qui déclenche un autre sub avec passage de paramétre dans une autre form qui se nomme autom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub Mise_en_marche_relais()
    If My.Settings.buz_vd Then
                        autom.buzzer_interne(5)
    End If
    End Sub
    et enfin dans ma fenêtre autom je j'ai ma procédure buzzer_interne qui prend en paramétres les minutes a additionner à la date en cours
    voici le code dans autom.vb :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    Public Sub buzzer_interne(ByVal tempo As Integer)
            'declenche le buzzer durant un temps donnée selon VD ou VI
            dateStop_buzzer = Now.AddMinutes(tempo)
            relais_K6()
            les_try("buzzer interne :: MISE EN MARCHE A " & Now.ToString & " ARRET DEFINI A " & dateStop_buzzer.ToString)
            Tr_K6.Interval = 1000 'on parcours tout les secondes pour voir si on a l'heure + le tps en min pour arreter le buzzer
            Tr_K6.Start()
        End Sub
     
    Private Sub Tr_K6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tr_K6.Tick
            If DateTime.Compare(dateStop_buzzer, Now) < 0 Then
                relais_K6()
                les_try("buzzer interne :: ARRET DU BUZZER A " & Now.ToString)
                Tr_K6.Stop()
            End If
    End Sub
    Un peu tiré par les cheveux comme code mais des contraintes autres ne me permettent de faire autrement !

  6. #6
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    je viens d'essayer sans utiliser de thread (threadMail) pour la procédure de départ traitement_ticket et la tout fonctionne parfaitement la condition de comparaison de date dans le timer est exécuté, donc pour que ca fonctionne avec mon thread il faudrait que j'utilise un delegate mais avec un timer je ne sais pas faire !

  7. #7
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Une solution simple consiste à activer le timer de façon permanente et positionner un flag déterminant si on doit ou non effectuer un traitement dans son event Tick.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  8. #8
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    J'ai du mal à saisir auriez vous un exemple s'il vous plaît?

  9. #9
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Dans la form contenant le bouton, l'activation permanente du Timer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    bool Tr_K6_Enabled = false ; // flag d'activation logique
    Tr_K6.Start() // activation "physiqe" permanente
    Dans le thread, 'activation logique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tr_K6_Enabled = true // pour activer logiquement les traitement du timer.
    Dans l'event Tick, on teste l'activation logique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Tr_K6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tr_K6.Tick
    if Tr_K6_Enabled Then
            If DateTime.Compare(dateStop_buzzer, Now) < 0 Then
                Tr_K6_Enabled=false // activation logique supprimée
                relais_K6()
                les_try("buzzer interne :: ARRET DU BUZZER A " & Now.ToString)
            End If
    End If
    End Sub
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] WebBrowser.Navigate ne fonctionne pas dans timer
    Par Nikko92 dans le forum C#
    Réponses: 0
    Dernier message: 13/10/2012, 15h57
  2. Mon timer ne fonctionne pas
    Par maxxou dans le forum VB.NET
    Réponses: 3
    Dernier message: 05/07/2007, 00h22
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo