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 :

Tester si un état est resté figé pendant x temps


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Par défaut Tester si un état est resté figé pendant x temps
    Bonjour, je voudrais créer une fonction qui permet de tester si un état est resté figé plus de 5sec. Bien entendu, l'utilisateur doit continuer à travailler. Pour cela, j'ai pensé mettre cette partie du code dans un Thread. Et maintenant, je sais pas comment faire pour la suite. Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    beh, qu'appelles tu un état pour commencer ?

    Est-ce en rapport avec les bases de données ou tu veux "juste" savoir
    si une variable (peu importe son nom) a été modifiée ?

    J'avoue que si je voulais faire cela, j'essayerais de faire un système avec
    une classe de Surveillance qui aurait une fonction d'abonnement dans laquelle
    on passerait la variable à "espionner".. et si cette variable était amenée à changer soit capable de "mémoriser" le dernier état avec la date...

    Ca serait un espèce d'espion de variable

    MAis bon, je soumets l'idée.. pour la réaliser, faut que je reflechisse encore
    un peu

    The Monz, Toulouse

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    oui, je ferais un watcher du genre :

    Register(Object obj, String valueToWatch, int TimeDelay)

    et avec la reflection, je pourrais comparer la variable à regarder....
    tous les TimeDelay

    Apres, je ne sais pas si on peut "facilement" etre "notifié" que la variable
    a changé... sauf si on met un truc du genre BindingSource sur la dite variable
    (ce qui veut dire, que le watcher scrute toutes les x millisecondes les variables)
    ==> Couteux en terme de perfo.. mais c une solution

    The Monz, Toulouse

  4. #4
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Par défaut
    Salut, non, je suis un train de programmer une machine à café lol. Deux leds, sont branché sur un port IO, tant que les leds clignotent ca veut dire que l'eau est pas chaude et si les leds reste figées, ca veut dire que l'eau est bonne. C'est pour ca que j'ai besoin d'aide... Après une journée de travail, mon cerveau est pas en mersure de trouver la solution hehe

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    allez va,

    une idée de classe Watcher... j'ai fait ca rapidemment

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    namespace WatchDog
    {
        public delegate void Change(object sender);
     
        public class WatchItem
        {
            public Object obj;
            public String value;
            public String actualValue;
            public void ChangeValue(String val)
            {
                actualValue = val;
            }
        }
     
        public class Watcher
        {
            List<WatchItem> objects;
            System.Timers.Timer timer;
            public event Change OnObjectUpdate;
     
            public Watcher()
            {
                objects = new List<WatchItem>();
                timer = new System.Timers.Timer();
                timer.Interval = 100;
                timer.Stop();
                timer.Enabled = false;
                timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
            }
     
            void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                foreach (WatchItem item in objects)
                {
                    String val = (item.obj.GetType().InvokeMember(item.value, System.Reflection.BindingFlags.GetProperty, null, item.obj, null)).ToString();
                    if (val != item.actualValue)
                    {
                        item.ChangeValue(val);
                        if (OnObjectUpdate != null)
                        {
                            OnObjectUpdate(item.obj);
                        }
                    }
                }
            }
     
            public void StartWatching()
            {
                // Build the data list
                foreach (WatchItem item in objects)
                {
                    item.actualValue = (item.obj.GetType().InvokeMember(item.value, System.Reflection.BindingFlags.GetProperty, null, item.obj, null)).ToString();
                }
                timer.Start();
            }
     
            public void StopWatching()
            {
                timer.Stop();
            }
     
            public void Register(Object obj, String data)
            {
                WatchItem t = new WatchItem();
                t.obj = obj;
                t.value = data;
                objects.Add(t);
            }
        }
    }
    et pour l'appeler

    tu fais un truc du genre :

    watch = new Watcher();
    watch.Register(button1, "Text");
    watch.OnObjectUpdate += new Change(watch_OnObjectUpdate);

    DAns mon cas, button1 est un bouton (et texte sa propriété)

    à améliorer

    The Monz, Toulouse

  6. #6
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Par défaut
    Merci, je vais regarder tout ca..

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

Discussions similaires

  1. Tester si une table est vide
    Par rsc dans le forum SQL
    Réponses: 2
    Dernier message: 01/07/2004, 16h25
  2. [JDBC]tester si une table est vide
    Par zozolh2 dans le forum JDBC
    Réponses: 5
    Dernier message: 28/05/2004, 09h17
  3. [XSL] Tester si la valeur est un entier dans un xml
    Par MrMaze dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/07/2003, 04h35
  4. Tester si un champ est NULL
    Par titititi007 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2003, 10h17
  5. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 11h54

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