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

Windows Forms Discussion :

[C#]Thread, event/delegate et Form


Sujet :

Windows Forms

  1. #21
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par smikar
    Bon, je crois qu'il faut vraiment que tu passes par ce SynchronizingObject.
    [...]
    Qui te permettra d'avoir le même comportement lors de l'usage dans le designer que pour le Timer normal.
    Ok je vais voir la doc dessus.

    Citation Envoyé par smikar
    Bonne chance
    merci je vais en avoir besoin.

  2. #22
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Mais non

    Fais vraiment comme le code que t'ai montré, quelque chose comme ça :

    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
     
    class Timer : ...
    {
    [...]
    private System.ComponentModel.ISynchronizeInvoke m_SynchronizationObject = null;
    public System.ComponentModel.ISynchronizeInvoke SynchronizingObject 
    {
    	get{return m_SynchronizingObject ;}
    	set{m_SynchronizingObject = value;}
    }
     
    protected virtual void OnTick(EventArgs e)
    {
      if(Tick != null) // Tick l'événement
      {
         if (SynchronizingObject != null && SynchronizingObject.InvokeRequired)
         {
           SynchronizingObject.BeginInvoke(Tick, new object[]{this, e});
         }
         else
         {
            Tick(this, e);
         }
      }
    }
    }
    Et tu peux améliorer ça en fonction du code de mes posts précédents.

    Allez jem'en vais profiter du soleil

  3. #23
    doccpu
    Invité(e)
    Par défaut
    J'ai fais :
    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
     
    class Timer : Component
    {
    [...]
    private System.ComponentModel.ISynchronizeInvoke m_SynchronizationObject = null;
    public System.ComponentModel.ISynchronizeInvoke SynchronizingObject 
    {
    	get{return m_SynchronizingObject ;}
    	set{m_SynchronizingObject = value;}
    }
     
    private void OnTime(TimerEventArgs e)
    		{
    			if (Timed != null)
    			{
    				foreach (TimedEventHandler t in Timed.GetInvocationList())
    				{
    					if (t != null)
    					{
    						if (SynchronizingObject != null && SynchronizingObject.InvokeRequired)
    						{
    							SynchronizingObject.BeginInvoke(t, new object[] { this, e });
    						}
    						else
    						{
    							t.BeginInvoke(this, e, new AsyncCallback(TimedEventHandlerComplete), t);
    						} 
    					}
    				}
    			}
    		}
     
    		private void TimedEventHandlerComplete(IAsyncResult ar)
    		{
    			TimedEventHandler e = (TimedEventHandler)ar.AsyncState;
    			e.EndInvoke(ar);
    		}
    }
    et sa fonctionne pas !
    dois-je interfacer mon composent ?

    Edit :
    En fait ca ne fonctionne pas parce que SynchronizingObject reste = null. tout le truc est de savoir pourquoi et comment resoudre ce problème

  4. #24
    doccpu
    Invité(e)
    Par défaut
    YA QUELQU'UN ?

    Comme je l'ai dit plus haut la condition ne passe pas car le SynchronizingObject reste = a null. est-ce que tu pourais m'expliquer pourquoi svp smikar ? ou tout autre personnes ....

    Ce truc me semble intéréssant mais je suis pas sûr de comprendre comment on s'en sert. un petit tuto svp ....

    merci d'avance pour vos lumières !

  5. #25
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Hello,

    ton SynchronizingObject ne va pas s'initialiser tout seul. Dans l'initialisation de ton composant dans le formulaire, tu dois initialiser ce SynchronizingObject avec son instance. Si tu te trouves dans la classe du Form, tu peux directement faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Timer t = new Timer();
    t.SynchronizingObject = this;
    pour que ton composant déclenche des événements dans le thread UI.

    Okay ?

  6. #26
    doccpu
    Invité(e)
    Par défaut
    oui en fait c'est bêtement une réference a l'objet parent.

    ok merci pour l'info !

    Je vais voir ce que ca donne !

  7. #27
    doccpu
    Invité(e)
    Par défaut
    Le lancement d'evenement fonctionne mais j'ai encore besoin d'un ajustage :

    Le code généré par vs dans le code d'initialisation ne me convient pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void InitializeComponent()
    		{
    			// 
    			// Timer1
    			// 
    			this.Timer1.Interval = 0;
    			this.Timer1.Repeat = false;
    			this.Timer1.SynchronizingObject = null;
    		}
    comment faire en sorte dans le code du composent que this.Timer1.SynchronizingObject = null; devienne this.Timer1.SynchronizingObject = this;?

  8. #28
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Regarde mon post du Mer Juil 27, 2005 13:17, cela doit faire l'affaire.

    Bonne chance

  9. #29
    doccpu
    Invité(e)
    Par défaut
    pas vraiement mais bon j'ai contourné le problème.
    merci pour tout et à tous !

    Je vais pouvoir faire un tuto maintenant !

    A#

Discussions similaires

  1. [C#3] Threads et delegates.
    Par azerty53 dans le forum C#
    Réponses: 7
    Dernier message: 20/02/2008, 23h34
  2. events & delegates
    Par simaxe25 dans le forum C++/CLI
    Réponses: 5
    Dernier message: 18/10/2007, 01h43
  3. events & delegates
    Par simaxe25 dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 17/10/2007, 18h01
  4. [Serveur] thread event
    Par moris113 dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 04/01/2007, 08h47
  5. [C#] Thread et events dans une form
    Par farfadet dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/12/2006, 18h50

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