begin process at 2012 02 04 07:22:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > NOTIFICATIONS DANS UN DELEGATE ASYNCHRONE

NOTIFICATIONS DANS UN DELEGATE ASYNCHRONE


 Description

Cliquez pour voir la capture en taille normale
Bonjour,
Pour un projet en développement, j'ai mis au point un delegate asynchrone avec 2 événements de type EventWaitHandle dont l'un informe quand le traitement est terminé et l'autre autorise le traitement suivant.
C'est une classe que j'ai appelé DelegateNotify qui encaspule le delegate et les 2 événements.

Pour illustrer ce delegate, j'ai développé un petit test sympathique et ludique : une télé!
Car une télé a besoin que l'image soit entièrement affichée avant de passer à la suivante.
Mais, ce n'est qu'un petit test alors il n'y a pas de présentateur !
Salut :)

Source

  • 1/ Le delegate:
  • using System;
  • using System.Collections.Generic;
  • using System.Text;
  • using System.Runtime.Serialization;
  • using System.Reflection;
  • using System.Threading;
  • namespace notify
  • {
  • public class DelegateNotify
  • {
  • public delegate void Notify();
  • public delegate void AsyncCallback(IAsyncResult ar);
  • private EventWaitHandle EventFinished;
  • private EventWaitHandle Event;
  • private Notify running;
  • private AsyncCallback review;
  • public DelegateNotify()
  • {
  • this.Event = new EventWaitHandle(false, EventResetMode.AutoReset);
  • this.EventFinished = new EventWaitHandle(false, EventResetMode.AutoReset);
  • }
  • public void SetFunction(Notify not)
  • {
  • this.running = not;
  • }
  • public void SetReview(AsyncCallback callback)
  • {
  • this.review = callback;
  • }
  • public void WaitBeforeContinue()
  • {
  • WaitHandle.WaitAny(new WaitHandle[] { this.Event });
  • }
  • public void WaitWorkEnding()
  • {
  • WaitHandle.WaitAny(new WaitHandle[] { this.EventFinished });
  • }
  • public void NotifyContinue()
  • {
  • this.Event.Set();
  • }
  • public void NotifyWorkEnding()
  • {
  • this.EventFinished.Set();
  • }
  • public void Invoke()
  • {
  • this.running.BeginInvoke(new System.AsyncCallback(delegate(IAsyncResult async) {
  • if (this.review != null)
  • this.review(async);
  • }), null);
  • }
  • }
  • }
1/ Le delegate:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization;
using System.Reflection;
using System.Threading;

namespace notify
{
    public class DelegateNotify
    {
        public delegate void Notify();
        public delegate void AsyncCallback(IAsyncResult ar);
        private EventWaitHandle EventFinished;
        private EventWaitHandle Event;
        private Notify running;
        private AsyncCallback review;

        public DelegateNotify()
        {
            this.Event = new EventWaitHandle(false, EventResetMode.AutoReset);
            this.EventFinished = new EventWaitHandle(false, EventResetMode.AutoReset);
        }

        public void SetFunction(Notify not)
        {
            this.running = not;
        }

        public void SetReview(AsyncCallback callback)
        {
            this.review = callback;
        }

        public void WaitBeforeContinue()
        {
            WaitHandle.WaitAny(new WaitHandle[] { this.Event });
        }

        public void WaitWorkEnding()
        {
            WaitHandle.WaitAny(new WaitHandle[] { this.EventFinished });
        }

        public void NotifyContinue()
        {
            this.Event.Set();
        }

        public void NotifyWorkEnding()
        {
            this.EventFinished.Set();
        }

        public void Invoke()
        {
            this.running.BeginInvoke(new System.AsyncCallback(delegate(IAsyncResult async) {
                if (this.review != null)
                    this.review(async);
            }), null);
        }
    }
}

 Conclusion

Pour résumer, la classe DelegateNotify utilise 1 delegate principal appelé Notify ainsi que 2 EventWaitHandle nommés EventFinished et Event. Il faut appeler d'abord SetFunction avec l'implémentation du delegate puis Invoke.
Ensuite, dans le delegate, on peut appeler NotifyWorkEnding et WaitBeforeContinue.
Dans l'application, on peut appeler WaitWorkEnding et NotifyContinue.
Et voila

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) ALGORITHME DE LA PROPENSION

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) WINDOWSGADGET LIKE par Frelon
Source avec Zip Source avec une capture Source .NET (Dotnet) USERCONTROL PLANNING / SEMAINE / JOURNÉE par yohan49
Source avec Zip Source avec une capture Source .NET (Dotnet) TEMPLATE MATCHING ET RECONNAISSANCE D'OBJETS AVEC OPENCV (EM... par boutemine
Source .NET (Dotnet) CALCULE D'UNE EXPRESSION MATHEMATIQUE PAR COMPILATION par yohan49
Source avec Zip Source avec une capture Source .NET (Dotnet) CALENDRIER TACTILE, SOUS FORME DE ROUES par Robert33

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) AFFICHAGE DE VALEUR PROVENANT D'U THREAD DANS UN FORMULAIRE par Nyuki
Source avec Zip Source avec une capture Source .NET (Dotnet) JEU DE LA VIE par epineurien
Source avec Zip Source .NET (Dotnet) TRANSFERT DE DONNÉES, SÉRIALIZATION XML POUR WINFORM par l0r3nz1
Source avec Zip PREPAREDFORMAT par Warny
Source avec Zip Source avec une capture Source .NET (Dotnet) CLIENT IRC QUI LIT À VOIX HAUTE par pigedanslelac

Commentaires et avis

Commentaire de SlimH2S le 24/02/2010 10:07:07

Salut,

belle invention mais ne pense tu pas réinventé la roue en passant à côté des AutoResetEvent et ManualResetEvent qui permettent lorsqu'ils sont combinés avec des threads d'être averti de la fin d'exécution d'un thread et aussi la reprise d'un autre ?

Commentaire de olivieram2 le 01/03/2010 04:26:23

bonjour,
Avec les objets EventWaitHandle, c'est déjà un handle.
En revanche, avec un AutoResetEvent, il faut faire truc.Handle.

Commentaire de olivieram2 le 01/03/2010 05:00:04

je ne vois pas trop ce que tu entends par avertir de la fin d'exécution d'un thread et la reprise d'un autre thread ?
ici:
  - le thread 1 fait son traitement et une fois qu'il a terminé attend d'être notifié pour continuer.
  - Le thread 2 attend que la thread 1 ait fini son traitement et une fois que le thread 1 a terminé le thread 2 fait son traitement.
  - Une fois que le thread 2 a fait son traitement, le thread 2 peut notifier au thread 1 de continuer.

Comment vois tu les choses avec 1 voir 2 AutoResetEvent ou ManualResetEvent ?

Commentaire de SlimH2S le 01/03/2010 09:45:47

D'après les explications que t'as donné dans ton message précédent, je pense que deux ManualResetEvent suffissent largement : un pour notifier que le Thread1 peut continuer et un autre pour notifier que le Thread2 peut continuer.

Commentaire de olivieram2 le 02/03/2010 07:07:45

Ok, merci de ta réponse et bonne journée :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Animation Flash dans les Application Windows [ par Online ] C'est encore moiVoila, cette fois ci, je voudrais mettre une animation flash sur mon application Wnidows mais je ne vois pas comment faire de facon s Animation & ressource... [ par welc ] Bonjour,J'utilise MS Visual C#.J'ai récupéré l'animation AVI qui apparait quant on copie un fichier sous windows xp.Je voudrais donc l'intégrer à mon video et richtextbox [ par poupthek ] Bonjour,Je voudrais ajouter une ou plusieurs vidéos à une richtextbox. Je sais comment faire avec une image (utilisation du clipboard) mais pas avec d Probleme multithreading Invoke etc. [ par tarkil ] Bonjour,J'ai un petit problème et j'espere que quelqu'un pourra m'aider.Je suis dans ma fenetre principale.Je lance un thread A.Depuis ce thread A, je Besoin d'aide pour lecteur video en C# [ par sof_fr ] Bonjour à tous,Je ne vai pas vous bourrer le crane avec 10 000 lignes alors je serai rapide :)J'ai un projet à mener à bien, et je dois programmer une Seek bar pour lecture d'une video [ par Tsu91 ] Bonjour,je voudrais savoir comment faire pour créer une Seek bar dans une appli de lecture d'un fichier video avec direct X?merci :D Animation - GIF [ par vainsoul ] Bsr tout le monde, Voila, j'ai crée un gif animé qui ne se reprend pas au debut lorsqu'il est finit, mais quand je l'utilise avec une appl Webcam et streaming [ par dionysos6868 ] Bonjour je cherche le moyen d'envoyer en flux continu la video prise par ma webcam en direct j'ai mon script pour avoir la video de ma webcam sur un Fichier avi sur Smartphone [ par zigxag ] Bonjour,mon application smartphone a pour but de demander l'enregistrement video d'une webcam. Une fois le fichier video enregistrer sur le serveur, j Accès partagés entre threads [ par CMatt ] Bonjour à tous! voici qq lignes de codes qui résume ce que je fais : using System; using System.Drawing; using System.Threading; public c


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,371 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales