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 :

Adapter la class TIMER à mon api


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 134
    Points : 54
    Points
    54
    Par défaut Adapter la class TIMER à mon api
    Bonjour à tous,

    Comment utilisé la class Timer dans mon application ?
    Voici l'exemple MSDN et il fonctionne lorsque je le test.
    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 static void Main()
         {
             System.Timers.Timer aTimer = new System.Timers.Timer();
             //J'ai une erreur ici, mais comment la résoudre !
             aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
     
             aTimer.Interval=5000;
             aTimer.Enabled=true;
     
             Console.WriteLine("Press \'q\' to quit the sample.");
             while(Console.Read()!='q');
         }
     
         // Specify what you want to happen when the Elapsed event is raised.
         private static void OnTimedEvent(object source, ElapsedEventArgs e)
         {
             Console.WriteLine("Hello World!");
         }
    Je veux envoyer des mails différé toute les X secondes, voici un fragment de mon code.
    J'ai essaye ceci mais ça fonctionne pas, ma méthode "extraireCoordonne" appel envoyerMail(...)!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    System.Timers.Timer aTimer = new System.Timers.Timer();
                // J'ai une erreur à ce niveau, comment résoudre la chose ?:calim2:
                aTimer.Elapsed += new ElapsedEventHandler(this.envoyerMail(coordonne);//Càd titre, nom, prenom, mail
                aTimer.Interval = 7;
                aTimer.Enabled = true;
    ....
    Avez vous des conseilles ?

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    La méthode utilisée pour gérer l'évènement doit avoir la même signature que le delegate ElapsedEventHandler, c'est à dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void ElapsedEventHandler(object sender, ElapsedEventArgs e)
    Or ta méthode envoyerMail prend d'autres paramètres, donc tu ne peux pas l'utiliser directement pour gérer l'évènement. La solution la plus simple est de passer par une méthode anonyme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aTimer.Elapsed += new ElapsedEventHandler(delegate { this.envoyerMail(coordonne); });

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 134
    Points : 54
    Points
    54
    Par défaut
    Snif Snif...

    Voici la méthode qui utilise 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
     
    public void extraireCoordonne(String ligne)
            {
                ArrayList coordonne = new ArrayList();
                string[] split = ligne.Split(new Char[] { ' ', '&', '$' });
                foreach (string s in split)
                {
                    if (s.Trim() != "")
                    {
                        //MessageBox.Show(s);
                        coordonne.Add(s);
                    }
                }
     
                System.Timers.Timer aTimer = new System.Timers.Timer();
                //aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
                aTimer.Interval = 10;//int.Parse(textBox9.Text); //Exemple 10 SEC
                aTimer.Elapsed += new ElapsedEventHandler(delegate { this.EnvoiMail(coordonne); });
                aTimer.Enabled = true;
                aTimer.Start();
                //this.EnvoiMail(coordonne);//Càd titre, nom, prenom, mail
            }
    1- J'affiche un MessageBox juste avant "client.Send(msg);" dans ma méthode EnvoiMail(), lorsque j'utilise le Timer il l'affiche en continue à interval de moins d'une seconde.

    2- Il ne respecte pas le délais que je lui est donner.

    3- Mes mails ne sont jamais envoyer.

    4- Lorsque j'utilise mon Timer j'ai un problème de Thread:
    Opération inter-threads non valide : le contrôle 'richTextBox1' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
    Avez vous des pistes ?
    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par c-bolo Voir le message
    1- J'affiche un MessageBox juste avant "client.Send(msg);" dans ma méthode EnvoiMail(), lorsque j'utilise le Timer il l'affiche en continue à interval de moins d'une seconde.

    2- Il ne respecte pas le délais que je lui est donner.
    L'intervalle doit être spécifié en millisecondes, pas en secondes

    Citation Envoyé par c-bolo Voir le message
    3- Mes mails ne sont jamais envoyer.
    Mets un point d'arrêt dans la méthode EnvoiMail pour vérifier ce qu'il se passe

    Citation Envoyé par c-bolo Voir le message
    4- Lorsque j'utilise mon Timer j'ai un problème de Thread:
    {"Opération inter-threads non valide : le contrôle 'richTextBox1' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé."}
    Une petite recherche de ce message d'erreur sur le forum devrait te donner quelques dizaines (si ce n'est des centaines) de résultats...

Discussions similaires

  1. Je trouve pas les .class dans mon dossier classes
    Par amine84 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 15/12/2007, 14h26
  2. recuperer une class sur mon serveur
    Par hterrolle dans le forum Général Java
    Réponses: 6
    Dernier message: 05/12/2007, 22h14
  3. Réponses: 5
    Dernier message: 04/10/2006, 15h45
  4. Problème d'utilisation de la classe timer
    Par benjiprog dans le forum Langage
    Réponses: 4
    Dernier message: 04/09/2006, 13h41
  5. importer une classe dans mon projet
    Par dietrich dans le forum Delphi
    Réponses: 1
    Dernier message: 17/07/2006, 09h57

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