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

Linq Discussion :

Event ou Threads


Sujet :

Linq

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 63
    Points : 18
    Points
    18
    Par défaut Event ou Threads
    Bonjours tous le monde,

    Voici ma situation :

    J'ai une variable "StandBy" de type bool qui est defini dans un struct, cette variable est accessible par l'ensemble de ma classe.
    Une machine est reliee a mon programme , lorsque la machine se debranche StandBy devient true au lieu de false;

    Et j'aimerai, déclencher un événement lorsque cette variable change de valeur.(pour savoir ainsi a quel moment la machine s'est debranchee);
    Est-ce possible ? si oui, comment faire ?


    Je vous remercie d'avance !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,
    Un évènement pourra faire l'affaire : event (référence C#)

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 63
    Points : 18
    Points
    18
    Par défaut
    Merci mais en fait j'ai deja essaye mais je ne comprend pas pk il ne rentre pas dedans quand je debranche ma machine.

    mon code est ainsi.


    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
            public struct DataFields
            {
                public string RecDataBox;
                public string CreditCounter;
                public string UsedCounter;
                public bool PuF;
                public bool MtrE;
                public bool TimeE;
                public bool AutoS;
                public bool BagB;
     
                public bool BagE;
                internal bool StandB;
     
     
                public bool STandB {
                    get { return StandB; }
                    set {
                        StandB = value;
                        NotifyPropertyChanged("STandB");
                    }
                }
     
     
                public bool BagT;
                public bool CreditM;
                public bool IdlelS;
                public bool DoorO;
                public bool SystemL;
     
     
                #region INotifyPropertyChanged Members
     
                public event PropertyChangedEventHandler PropertyChanged;
                private void NotifyPropertyChanged(String info) {
                    if (PropertyChanged != null) {
                        PropertyChanged(this, new PropertyChangedEventArgs(info));
                    }
                }
            };

  4. #4
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par nana92 Voir le message
    Une machine est reliee a mon programme , lorsque la machine se debranche StandBy devient true au lieu de false;
    Je pense que la clé est là : comment cette variable passe-t-elle a true ? Est-ce ton programme qui scrute régulièrement l'état de la machine ? Ou alors est-ce une propriété qui, en fonction de l'état de la machine au moment où tu l'interroges, te renvoies true ou false ?
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  5. #5
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 63
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Je pense que la clé est là : comment cette variable passe-t-elle a true ? Est-ce ton programme qui scrute régulièrement l'état de la machine ? Ou alors est-ce une propriété qui, en fonction de l'état de la machine au moment où tu l'interroges, te renvoies true ou false ?
    en fait jai teste la machine plusieures fois et j'ai vu que comme elle ne pouvait pas renvoye de signal alors jai teste les propriete apres avoir debranche et jai vu que la propriete StandB devenait false. La machine recoit un signal qui change le statut de la propriete .

    seuelemnt maintenant j'aimerais en etre averti.

    Merci d'avance

  6. #6
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 63
    Points : 18
    Points
    18
    Par défaut
    J'aimerais soit faire soit une verification constante de la propriete en parallele de mon programme soit etre averti directement lorque celle ci change.
    avez vous une idee ?

  7. #7
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par nana92 Voir le message
    Merci mais en fait j'ai deja essaye mais je ne comprend pas pk il ne rentre pas dedans quand je debranche ma machine.
    Tu peux utiliser la balise CODE lors que insères du code. Cela le formate de manière à ce qu'il soit plus lisible

    Citation Envoyé par nana92 Voir le message
    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
     
            public struct DataFields
            {
                public string RecDataBox;
                public string CreditCounter;
                public string UsedCounter;
                public bool PuF;
                public bool MtrE;
                public bool TimeE;
                public bool AutoS;
                public bool BagB;
     
                public bool BagE;
                internal bool StandB;
     
     
                public bool STandB {
                    get { return StandB; }
                    set {
                        StandB = value;
                        NotifyPropertyChanged("STandB");
                    }
                }
     
     
                public bool BagT;
                public bool CreditM;
                public bool IdlelS;
                public bool DoorO;
                public bool SystemL;
     
     
                #region INotifyPropertyChanged Members
     
                public event PropertyChangedEventHandler PropertyChanged;
                private void NotifyPropertyChanged(String info) {
                    if (PropertyChanged != null) {
                        PropertyChanged(this, new PropertyChangedEventArgs(info));
                    }
                }
            };
    C'est normal que ton code ne fonctionne pas. L'interface INotifyPropertyChanged permet de dire que tu mets le mécanisme en place nécessaire à la surveillance de changement intervenant dans une classe que tu définies, pas de mettre sous surveillance une classe que tu utilises. Ici, ce n'est pas la bonne approche.

    Tu as potentiellement plusieurs solutions (mais la mise en place de certaines nécessite certains prérequis) :
    1. La classe contenant la propriété StandBy défini un événement style OnStandByChanged. Dans ce cas, il te suffit de l'écouter ;
    2. La classe contenant la propriété StandBy implémente l'interface INotifyPropertyChanged. Dans ce cas, il te faut écouter l'événement PropertyChanged et vérifier que le nom de la propriété correspond à "StandBy" ;
    3. Lire, à intervalle régulier, la valeur de la propriété StandBy.


    La solution numéro 3 fonctionnera à tous les coups, mais est également la plus lourde à mettre en place. En effet, il faut :
    • Lancer une tâche à intervalle régulier et scruter la valeur de StandBy ;
    • Définir un événement StandByChanged (ou tout au nom mieux adapté) que ton programme puisse écouter afin d'être notifié des modifications ;
    • Si la valeur de StandBy a changé (et seulement si elle a changé, pas juste si elle est false), générer un événement StandByChanged.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  8. #8
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 63
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Tu peux utiliser la balise CODE lors que insères du code. Cela le formate de manière à ce qu'il soit plus lisible



    C'est normal que ton code ne fonctionne pas. L'interface INotifyPropertyChanged permet de dire que tu mets le mécanisme en place nécessaire à la surveillance de changement intervenant dans une classe que tu définies, pas de mettre sous surveillance une classe que tu utilises. Ici, ce n'est pas la bonne approche.

    Tu as potentiellement plusieurs solutions (mais la mise en place de certaines nécessite certains prérequis) :
    1. La classe contenant la propriété StandBy défini un événement style OnStandByChanged. Dans ce cas, il te suffit de l'écouter ;
    2. La classe contenant la propriété StandBy implémente l'interface INotifyPropertyChanged. Dans ce cas, il te faut écouter l'événement PropertyChanged et vérifier que le nom de la propriété correspond à "StandBy" ;
    3. Lire, à intervalle régulier, la valeur de la propriété StandBy.


    La solution numéro 3 fonctionnera à tous les coups, mais est également la plus lourde à mettre en place. En effet, il faut :
    • Lancer une tâche à intervalle régulier et scruter la valeur de StandBy ;
    • Définir un événement StandByChanged (ou tout au nom mieux adapté) que ton programme puisse écouter afin d'être notifié des modifications ;
    • Si la valeur de StandBy a changé (et seulement si elle a changé, pas juste si elle est false), générer un événement StandByChanged.
    Merci bcp !!!
    Sans abuser de ta patience aurais tu une idee de code car j'ai essaye mais ca ne marche toujours pas , aurais tu une direction pour la premiere ou plutot la 3 eme solution?
    Merci bcp bcp!!!

  9. #9
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Dans ce cas, met ton code. On regardera ensemble ce qui ne va pas (et c'est comme ça que tu comprendras le mieux !)
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  10. #10
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 63
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Dans ce cas, met ton code. On regardera ensemble ce qui ne va pas (et c'est comme ça que tu comprendras le mieux !)
    Merci bcp pour ta patience,

    Il faut que je lance une procedure avec un timer? J'ai peur que mon programme reste bloque sur ce timer et oubli de continuer a executer la suite du programme, car la verification doit se faire en parrallele ou a interval regulier tout en continuant mon programme.

  11. #11
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Voici un exemple pour mettre en place un timer.

    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    using System.Threading;
    namespace ExempleTimer
    {
        class Program
        {
            static void Main(string[] args)
            {
                Timer timer = new Timer(MyTimerCallback, null, 0, 2000);
     
                Console.ReadLine();
            }
     
            private static void MyTimerCallback(object state)
            {
                Console.WriteLine("Tic !");
            }
        }
    }
    Comme tu peux le constater, ce n'est pas compliqué et assez rapide à mettre en oeuvre.

    La variable timer représente le timer à proprement parler. Lorsque je l'instance, je lui passe en paramètre :
    • La fonction a appeler à chaque fois que le timer arrive à échéance. La fonction doit être de type TimerCallback et donc ne pas renvoyer de valeur et prendre en paramètre un object ;
    • Un paramètre qu'il est possible de passer au callback (ici null car je ne m'en sers pas, mais tu peux passer n'importe quoi, et ce paramètre initialisera le paramètre state de ton callback) ;
    • Quand (en ms) doit commencer le timer. 0 pour tout de suite. 1000 pour 1s après l'instanciation, etc...
    • L'intervalle entre chaque appelle au callback (en ms). Ici, je l'ai fixé à 2s.


    J'ai peur que mon programme reste bloque sur ce timer et oubli de continuer a executer la suite du programme, car la verification doit se faire en parrallele ou a interval regulier tout en continuant mon programme.
    Comme tu peux le constater avec ce petit programme d'exemple, ma procédure principale se retrouve bloqué sur le Console.ReadLine(). Pourtant, le "tic" s'effectue bien toutes les 2s. Pas de blocage. Tout est fait en parallèle.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  12. #12
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 63
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Voici un exemple pour mettre en place un timer.

    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    using System.Threading;
    namespace ExempleTimer
    {
        class Program
        {
            static void Main(string[] args)
            {
                Timer timer = new Timer(MyTimerCallback, null, 0, 2000);
     
                Console.ReadLine();
            }
     
            private static void MyTimerCallback(object state)
            {
                Console.WriteLine("Tic !");
            }
        }
    }
    Comme tu peux le constater, ce n'est pas compliqué et assez rapide à mettre en oeuvre.

    La variable timer représente le timer à proprement parler. Lorsque je l'instance, je lui passe en paramètre :
    • La fonction a appeler à chaque fois que le timer arrive à échéance. La fonction doit être de type TimerCallback et donc ne pas renvoyer de valeur et prendre en paramètre un object ;
    • Un paramètre qu'il est possible de passer au callback (ici null car je ne m'en sers pas, mais tu peux passer n'importe quoi, et ce paramètre initialisera le paramètre state de ton callback) ;
    • Quand (en ms) doit commencer le timer. 0 pour tout de suite. 1000 pour 1s après l'instanciation, etc...
    • L'intervalle entre chaque appelle au callback (en ms). Ici, je l'ai fixé à 2s.



    Comme tu peux le constater avec ce petit programme d'exemple, ma procédure principale se retrouve bloqué sur le Console.ReadLine(). Pourtant, le "tic" s'effectue bien toutes les 2s. Pas de blocage. Tout est fait en parallèle.

    Merci beaucoup, je vais essyaer ca tout de suite et je te dis si ca marche.

  13. #13
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 63
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par nana92 Voir le message
    Merci beaucoup, je vais essyaer ca tout de suite et je te dis si ca marche.
    Ca marche!!!!!!!!!!!!!!!!!!!!!!!!!!!!!BH !!!!!!!!!!!!!!!!!!!!

    Merci Bcppp tu m'a bcp aide.

  14. #14
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Je t'en prie

    N'oublie pas de marquer la discussion comme
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  15. #15
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 63
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Je t'en prie

    N'oublie pas de marquer la discussion comme
    C,est fait.

    Juste comment vois t-on que ma solution est du typer "timercallback" tu as ecrit = new timer(....);
    et "mytimercallback c'est seulement un nom emprunte...

    C'est du typer timer tout court non?

    Merci.

  16. #16
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Je ne suis pas sur de comprendre la question

    mytimercallback , ce n'est pas un nom emprunté. C'est le nom de la méthode qui sera appelée par le timer dès qu'il arrive à échéance. Si ta méthode s'appelle Toto, alors il aura fallu passer Toto en paramètre. Dans mon exemple, j'aurai pu mettre Program.MyTimerCallBack (dans la mesure où c'est une méthode statique). Cela aurait peut être été plus claire ?

    Un dernier détail : tant que ton timer doit être actif, garde une référence à ton timer, histoire d'éviter que le ramasse miette ne passe par là...
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  17. #17
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 63
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Je ne suis pas sur de comprendre la question

    mytimercallback , ce n'est pas un nom emprunté. C'est le nom de la méthode qui sera appelée par le timer dès qu'il arrive à échéance. Si ta méthode s'appelle Toto, alors il aura fallu passer Toto en paramètre. Dans mon exemple, j'aurai pu mettre Program.MyTimerCallBack (dans la mesure où c'est une méthode statique). Cela aurait peut être été plus claire ?

    Un dernier détail : tant que ton timer doit être actif, garde une référence à ton timer, histoire d'éviter que le ramasse miette ne passe par là...
    Je voulais juste dire que la fonction ou le timer n'est pas de type "timercallback" mais "timer" tout court car "mytimercallback"est juste un nom d'emprunt comme tu l'a dit.
    Pourquoi garder une reference et comment surtout ? ;-)
    Merci merci

  18. #18
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Ah d'accord.

    Alors, il y a deux choses à distinguer :
    • l'objet timer : lui est bien du type Timer et représente ton Timer. Grace à lui, tu peux agir dessus. Par exemple, arrêter le timer ;
    • le callback : lui, doit être de type TimerCallback. Mais une fonction est d'un type dès lors que sa signature est compatible avec celui du type. Le type TimerCallback définie une fonction prenant un paramètre de type Object et ne renvoyant rien. Il faut donc passer au timer une fonction ayant la même signature.


    Pourquoi garder une référence ? Comme je te le disais, c'est pour éviter que le ramasse miette ne recycle ton objet Timer, et interrompe donc celui-ci ! Pour garder une référence, rien de plus simple, il suffit que tu aies toujours une variable qui pointe sur le timer.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  19. #19
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 63
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Ah d'accord.

    Alors, il y a deux choses à distinguer :
    • l'objet timer : lui est bien du type Timer et représente ton Timer. Grace à lui, tu peux agir dessus. Par exemple, arrêter le timer ;
    • le callback : lui, doit être de type TimerCallback. Mais une fonction est d'un type dès lors que sa signature est compatible avec celui du type. Le type TimerCallback définie une fonction prenant un paramètre de type Object et ne renvoyant rien. Il faut donc passer au timer une fonction ayant la même signature.


    Pourquoi garder une référence ? Comme je te le disais, c'est pour éviter que le ramasse miette ne recycle ton objet Timer, et interrompe donc celui-ci ! Pour garder une référence, rien de plus simple, il suffit que tu aies toujours une variable qui pointe sur le timer.
    Merci beaucoup . Tu est vraiment pro tu arrives a tres bien cerner les questions et ainsi a repondre parfaitement ! merci encore .
    Si il y a un moyen de te noter sur ce site dis le moi

  20. #20
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,
    Je me permets juste une petite précision. La solution de dorinf fonctionne très bien, toutefois il faut garder à l'esprit qu'elle est multi-thread. Comme l'idée de départ était de lever un event lors du changement de valeur de la propriété, l'objet qui va s'abonner à l'event doit prendre en compte ce multi-threading afin d'éviter un "Cross-thread operation not valid". Typiquement, une Form ne pourra pas mettre à jour un label pour indiquer que la machine est déconnectée sans passer par un Control.Invoke.

    Citation Envoyé par nana92 Voir le message
    Merci beaucoup . Tu est vraiment pro tu arrives a tres bien cerner les questions et ainsi a repondre parfaitement ! merci encore .
    Si il y a un moyen de te noter sur ce site dis le moi
    J'avoue que les réponses de dorinf sont complètes et précises, tu peux les noter en cliquant sur le pouce vert en bas de chaque message

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Events et threads
    Par HamzuS The Great dans le forum Développement Windows
    Réponses: 1
    Dernier message: 16/12/2010, 22h18
  2. Récupération d'event avec thread
    Par koyot3 dans le forum VB.NET
    Réponses: 1
    Dernier message: 17/09/2010, 08h25
  3. Création events pour thread
    Par syphon22 dans le forum Langage
    Réponses: 3
    Dernier message: 19/01/2010, 08h50
  4. Swing Event Dispatching Thread
    Par YeFFreY dans le forum EDT/SwingWorker
    Réponses: 14
    Dernier message: 23/06/2008, 10h53
  5. [C#]Thread, event/delegate et Form
    Par doccpu dans le forum Windows Forms
    Réponses: 28
    Dernier message: 01/08/2005, 18h35

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