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

C# Discussion :

Problèmes avec des timers (qui ne tick plus). Incompréhension.


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 50
    Points : 29
    Points
    29
    Par défaut Problèmes avec des timers (qui ne tick plus). Incompréhension.
    Bonjour à tous!


    Je me tourne vers vous par ce que j'ai un bug incompréhensible dans mon petit programme. Pour résumé, c'est un logiciel d'automatisation de tests batteries. En gros, on le lance, et il va successivement lancer une vidéo pendant 22 min, puis lancer 10 onglets firefox, puis ouvrir fermer word/adobe reader/mp3 10 fois chacun.

    Pour cela, j'utilise le gestionnaire d'evenement des timers. Je fais un des tests, quand celui ci est fini, je modifie l'event manager pour qu'il passe au suivant, en modifiant le temps. Jusque la pas de soucis. Le probleme vient des timers pour les 3 derniers. J'ouvre le programme une fois, je le ferme, je le rouvre, et après plus rien ne se passe...
    J'utilise visual 2010, et quand je fais du step by step en debug, il step dans un autre ticks de timer, et s'arrete. Comme si le timer en question s'était désactivé. J'ai enlevé ledit timer, et la il sort de la fonction, et le debug s'arrete... Voici la code:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
            private void launchTest()
            {
                MessageBox.Show("Battery test initiated");   
                s_myTimer.Tick += new EventHandler(s_myTimer_word);
                s_myTimer.Interval = 5000;
                s_myTimer.Start();
            }
     
            static void s_myTimer_vlc(object sender, EventArgs e)
            {
                if (s_myCounter == 0)
                {
                    Process.Start("C:\\testautonomie\\gattaca_x264hd-001.mkv");
                    s_myTimer.Interval = 10000;
                }
     
                if (s_myCounter >= 1)
                {
                    closeApp("vlc");
                    s_myCounter = 0;
                    s_myTimer.Tick -= new EventHandler(s_myTimer_vlc);
                    s_myTimer.Tick += new EventHandler(s_myTimer_word);
                    s_myTimer.Interval = 5000;
                    s_myTimer.Start();
                }
                s_myCounter++;
            }
            // jusque la, pas de soucis, tout ce passe bien! ca ce complique derrière:
     
            static void s_myTimer_word(object sender, EventArgs e)
            {
                if (s_myCounter > 0)
                    closeApp("wordpad");
     
                Process.Start("C:\\testautonomie\\txt.txt");
     
                if (s_myCounter >= 5)
                {
                    closeApp("wordpad");
                    s_myCounter = 0;
                    s_myTimer.Tick -= new EventHandler(s_myTimer_word);
                    s_myTimer.Tick += new EventHandler(s_myTimer_pdf);
                    s_myTimer.Interval = 5000;
                    s_myTimer.Start();
                }
                s_myCounter++;
            }
    et donc dans cette derniere fonction (et egalement pour les 2 autres pdf/mp3 qui sont similaire) il passe 2 fois dans le tick, et après plus rien...

    Si quelqu'un a une idée, je suis plus que preneur!


    Merci d'avance!

  2. #2
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    Peut être que cela vient de ma fonction closeapp, qui ferme de facon assez barbare les process. Je la reproduit aussi ici, si vous avez des conseils pour faire en sorte qu'elle marche mieux ^^


    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
    19
    20
    21
    static private void closeApp(string appName)
            {
                if (s_myTimer.Enabled)
                {
                    s_myTimer.Stop();
                    System.Diagnostics.Process[] pArry = System.Diagnostics.Process.GetProcesses();
     
                    foreach (System.Diagnostics.Process p in pArry)
                    {
                        string s = p.ProcessName;
                        Console.WriteLine(s);
     
                        s = s.ToLower();
                        if (s.CompareTo(appName) == 0)
                        {
                            p.Kill();
                        }
     
                    }
                }
            }

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    C'est bon, j'ai auto résolu mon probleme. J'avais zappé que j'avais un timer.Stop() dans mon closeapp, et je ne le relancais pas quand je l'utilisais betement dans un if tout con.

    Je me remercie moi même pour mon coup de main ^^

    Problème résolu!

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Je te suggère d'utiliser une librairie comme quartznet : http://quartznet.sourceforge.net/
    C'est plus robuste que des timers pour tout ce qui est planification de taches.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    Merci pour la proposition!

    Mais pour ce que j'en fais, ca ne sert a rien d'aller chercher une lib annexe. Tout ce que je peux trouver dans le .net est bien suffisant ^^

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

Discussions similaires

  1. [GD] Problème avec des fonctions qui créent des éléments dans une image.
    Par magnus2229 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 13/07/2011, 10h38
  2. problème avec des cookies qui ne se créent pas :/
    Par healou dans le forum Langage
    Réponses: 9
    Dernier message: 11/07/2011, 14h39
  3. Problème avec des Timers
    Par pat77176 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/12/2009, 12h03
  4. Problème avec des timers
    Par haraelendil dans le forum Débuter
    Réponses: 2
    Dernier message: 08/07/2008, 15h41
  5. Réponses: 15
    Dernier message: 31/01/2007, 23h03

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