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#] Events, éviter les boucles infinies


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut [C#] Events, éviter les boucles infinies
    Bonjour,
    Je fais un programme dans lequel une fonction doit être avertie qu'une valeur a changé ou qu'un élément s'est ajouté dans une Liste.
    J'ai regardé comment fonctionnent les Events en C# et je trouve cela assez compliqué. Y aurait-il un moyen plus simple ? J'essaie d'éviter une boucle infinie qui serait une solution pas très propre et qui consomme beaucoup de ressources, je pense.
    Merci d'avance pour vos réponses.

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Euh ....

    Qu'est ce qui ne te va pas dans les events ? C'est simple et "straightforward"
    De plus, si tu veux monitorer une liste (si j'ai bien compris ton besoin) tu as deux moyens simples :

    - utiliser une ObservableCollection (3.0, assembly WindowsBase)

    - définir ta propre collection héritée de Collection<T> et overrider les méthodes InsertItem, RemoveItem, ClearItems etc ... pour déclencher tes évenements sur modification de la collection (plus très utile avec l'avénement de l'ObservableCollection).

    Ne parlons même pas de ton histoire de boucle infinie, là ce n'est même plus du développement mais de la poésie toute pure.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    BindingList ! BindingList !

    ou si tu bosses avec la base...

    DataTable ! DataTable !

    ಠ_ಠ

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Guulh Voir le message
    BindingList ! BindingList !
    Objectivement, je trouve l'ObservableCollection beaucoup plus simple à utiliser que les Bindings.


    ou si tu bosses avec la base...
    Pas obligatoirement, ça marche très bien sans.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Ne parlons même pas de ton histoire de boucle infinie, là ce n'est même plus du développement mais de la poésie toute pure.
    Un pote vient de me dire qu'il programme toujours ce genre de truc avec une boucle infinie...
    Enfin, je vais regarder les ObservableCollection, BindingList, et DataTable pour voir comment ca fonctionne.

  6. #6
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Objectivement, je trouve l'ObservableCollection beaucoup plus simple à utiliser que les Bindings.
    Je n'en doute pas, et m'empresserai de l'essayer dès que je me lance dans le Fx 3.0 ou 3.5.

    Citation Envoyé par Bluedeep Voir le message
    Pas obligatoirement, ça marche très bien sans.
    Certes, mais une approche tout objet, préférant des objets typés à des tuples, est parfois plus adaptée. Les DataTable sont néanmoins très utile, je te l'accorde
    ಠ_ಠ

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Ne parlons même pas de ton histoire de boucle infinie, là ce n'est même plus du développement mais de la poésie toute pure.
    Penses-tu qu'il faut à tout prix éviter les boucles infinies, même si on travaille avec plusieurs threads dans un même programme ? (un thread attendant le résultat d'un autre)

  8. #8
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Pour répondre en deux mots : la syntaxe de C# a été conçue pour faciliter la programmation à base d'événements, qui permettent à des classes de s'abonner à des événements (d'où le nom ) émis par d'autres classes. C'est TRES utilisé par le framework, notamment par les Windows Forms par exemple. Je te conseille de te documenter sur les mots clés "event", "delegate" du C#.
    ಠ_ಠ

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Pour répondre en deux mots : la syntaxe de C# a été conçue pour faciliter la programmation à base d'événements, qui permettent à des classes de s'abonner à des événements (d'où le nom ) émis par d'autres classes. C'est TRES utilisé par le framework, notamment par les Windows Forms par exemple. Je te conseille de te documenter sur les mots clés "event", "delegate" du C#.
    Merci pour ta réponse. C'est ce que je vais faire.

  10. #10
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Citation Envoyé par levalp Voir le message
    Penses-tu qu'il faut à tout prix éviter les boucles infinies, même si on travaille avec plusieurs threads dans un même programme ? (un thread attendant le résultat d'un autre)
    A mon avis, oui, il vaut mieux éviter... Et pour y remédier, il existe des classes pour se synchroniser entre threads, et cela ne prend pas de temps processeur. Je parle de AutoResetEvent, et ManualResetEvent.
    A creuser !
    "Si vous voulez être l’esclave des banques et payer pour financer votre propre esclavage, alors laissez les banquiers créer la monnaie" - Josiah Stamp, 1920, Gouverneur de la Banque d’Angleterre
    "Qui ne peut acheter ruine qui voudrait vendre" - Jacques Duboin.
    "Nous n'héritons pas la terre de nos parents, nous l'empruntons à nos enfants." - Antoine de Saint Exupéry

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par neilbgr Voir le message
    A mon avis, oui, il vaut mieux éviter... Et pour y remédier, il existe des classes pour se synchroniser entre threads, et cela ne prend pas de temps processeur. Je parle de AutoResetEvent, et ManualResetEvent.
    A creuser !
    Je vais creuser.
    Quelqu'un aurait un exemple de programme avec une ObservableAssembly ?
    Il y en a un sur MSDN mais je n'arrive pas à le faire fonctionner.
    Merci d'avance.

  12. #12
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour

    Citation Envoyé par Guulh Voir le message
    Je n'en doute pas, et m'empresserai de l'essayer dès que je me lance dans le Fx 3.0 ou 3.5.
    Il est utile de préciser que cette partie du 3.0 est une extension du System namespace qui n'implique absolument pas l'utilisation de WWF, WPF, WCF. Tu peux installer le 3.0 et te contenter de rajouter WindowsBase aux références de ton projet pour profiter de cette extension, sans te préoccuper des W*F.

    Certes, mais une approche tout objet, préférant des objets typés à des tuples, est parfois plus adaptée. Les DataTable sont néanmoins très utile, je te l'accorde
    Je partage entiérement ton point de vue, et sortie des classes de DAL, j'estime que, sauf exception, il n'y a pas lieu d'avoir des références au System.Data dans le reste de l'application.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  13. #13
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par levalp Voir le message
    Penses-tu qu'il faut à tout prix éviter les boucles infinies, même si on travaille avec plusieurs threads dans un même programme ? (un thread attendant le résultat d'un autre)
    Comme dit plus haut, il y a toute une panoplie d'objets pour synchroniser des threads ou ce que tu veux; dans ce cas utiliser une boucle infinie relève de (très) mauvaises pratiques de programmation.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Comme dit plus haut, il y a toute une panoplie d'objets pour synchroniser des threads ou ce que tu veux; dans ce cas utiliser une boucle infinie relève de (très) mauvaises pratiques de programmation.
    OK, je vois ce que tu veux dire.

    Citation Envoyé par levalp Voir le message
    Je vais creuser.
    Quelqu'un aurait un exemple de programme avec une ObservableAssembly ?
    Il y en a un sur MSDN mais je n'arrive pas à le faire fonctionner.
    Merci d'avance.
    Je viens de me rendre compte que le ObservableAssembly relève du Framework 3. J'ai VS2005 et seulement le Framework 2 et je ne pourrai donc pas l'utiliser.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Pour le framework 2.0, tu peux alors utiliser une BindingList<>, voire meme créer la tienne (derive de CollectionBase<> avec une classe levant les events) si tes besoins sont plus simples qu'une BindingList<>

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par SirJulio Voir le message
    Pour le framework 2.0, tu peux alors utiliser une BindingList<>, voire meme créer la tienne (derive de CollectionBase<> avec une classe levant les events) si tes besoins sont plus simples qu'une BindingList<>
    OK. Peut-on utiliser un wait avec un événement généré par une BindingList ?
    (une fonction attend que la Bindinglist soit modifiée)

  17. #17
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par levalp Voir le message
    OK. Peut-on utiliser un wait avec un événement généré par une BindingList ?
    (une fonction attend que la Bindinglist soit modifiée)
    Il n'y a pas à attendre. Je te conseille vraiment de te renseigner sur le système d'events de C#...
    En deux mots : une classe Emetteur peut présenter un event. Toute autre classe Recepteur peut abonner une fonction à cet event ; cette fonction sera automatiquement appelée lorsque l'Emetteur déclenche son event.

    Dans le cas qui t'intéresse, tu crées une BindingList, puis tu abonnes une de tes classes à l'événement ListChanged de cette BindingList.

    Les event n'ont rien à voir avec les threads. Donc pas de wait.
    ಠ_ಠ

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 144
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Les event n'ont rien à voir avec les threads. Donc pas de wait.
    OK, mais un thread peut contenir un wait, me trompe-je ?

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Citation Envoyé par levalp Voir le message
    OK, mais un thread peut contenir un wait, me trompe-je ?
    Salut,

    oui, bien sur (enfin un sleep(double) quoi), mais comme dit au dessus, il n'y a aucun rapport avec les events. Peut-tu preciser ce que tu cherches en parlant de ca :

    "OK. Peut-on utiliser un wait avec un événement généré par une BindingList ?
    (une fonction attend que la Bindinglist soit modifiée)"

    Car ceci est la description meme d'un event (il se declenche sur une action precise).

  20. #20
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Tu ne te trompes pas. Mais si tu veux t'abonner via les event aux modifications d'une BindingList, tu n'as pas besoin ni de thread, ni de wait, ni de rien de compliqué
    ಠ_ಠ

Discussions similaires

  1. Empêcher les boucles infinies
    Par Smilecodes dans le forum Apache
    Réponses: 2
    Dernier message: 19/08/2007, 12h04
  2. problème avec les boucle infinies
    Par manciaux dans le forum C
    Réponses: 3
    Dernier message: 14/05/2007, 12h16
  3. [MySQL] Chapitre, sous-chapitre & sous-sous-chapitre - éviter les boucles ?
    Par glork2007 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/03/2007, 09h49
  4. [SQL - procStock ] optimisation du code (éviter les boucles)
    Par luimême dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/10/2005, 17h22
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 00h04

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