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 :

Utilisation de System.ComponentModel.Component


Sujet :

C#

  1. #1
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut Utilisation de System.ComponentModel.Component
    Bonjour,

    J'ai une application qui se connecte à des automates et qui attend des notifications de sa part. Ces notifications se font via la connexion à l'automate, puis ce dernier remonte des événements.

    Tout fonctionne, mais seulement dans une application WinForms. J'aimerais passer cela en service Windows, mais les événements ne remontent pas. Idem pour une application console.

    J'ai fait quelques recherches et j'ai l'impression qu'il faut que je fasse hériter mon point d'entrée de l'application (main) de System.ComponentModel.Component. Le problème est que je ne sais pas comment l'utiliser, et je nage un peu...

    Quelqu'un peut m'aider? Je ne suis peut-être pas sur la bonne voie...

    Merci d'avance !

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Points : 405
    Points
    405
    Par défaut
    ton automate est connecté comment au PC? port Serie, port //, TCP ????
    S'il n'y a pas de Solution, c'est qu'il n'y a pas de Problème.
    ----------------------------------------------------------------------------------------
    Pour se protéger, un bon préservatif pour votre PC : AntiVir et SpyBot - Search & Destroy

  3. #3
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    TCP, via un protocole propriétaire du fabriquant (Beckhoff). Mais je ne pense pas que le problème vienne de là car mon code est exactement le même dans mon application graphique, console et service windows...

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Points : 405
    Points
    405
    Par défaut
    Désolé, je ne peu aidé
    S'il n'y a pas de Solution, c'est qu'il n'y a pas de Problème.
    ----------------------------------------------------------------------------------------
    Pour se protéger, un bon préservatif pour votre PC : AntiVir et SpyBot - Search & Destroy

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    si les événements ne remonte pas dans une application console, il y a fort à parier que ton application travaille avec les boucles d'événements windows. Et donc, forcement, en appli console ou Service, ca va pas le faire (vu que la pompe à message n'existe pas dans une appli console (pour un service, je ne sais pas...)

    Dans ton application, tu as des timers, des choses comme cela ?

    Si tu as des mécanismes genre Timer (issue de Windows.Forms.Timer), il est logique que cela ne puisse fonctionner puisque ces timers s'appuient sur la pompe à message pour notifier que le temps s'est écouler...
    (il vaut mieux alors utiliser les timer multimédia qui en .Net sont sous Windows.Thread.timers si ma mémoire n'est pas complètement défaillante))

    Après, j'aurais tendance à dire que si ton appli marche ne console, elle tournera aussi en service...

    Après, qu'est ce qui ne marche pas ? les notifications ?
    comment gères tu les notifications ? par pooling ? par "exceptions" ?

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  6. #6
    Membre habitué Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Points : 130
    Points
    130
    Par défaut
    Salut theMonz,

    merci de ta réponse ! Peux-tu m'en dire un peu plus sur cette "pompe à message" ou me filer un lien? De quoi s'agit-il?

    Citation Envoyé par theMonz31 Voir le message
    Dans ton application, tu as des timers, des choses comme cela ?
    Non, je n'ai pas de timer. Je n'utilise à aucun endroit des fonctionnalités de System.Windows.Forms.

    Citation Envoyé par theMonz31 Voir le message
    Après, j'aurais tendance à dire que si ton appli marche ne console, elle tournera aussi en service...
    Je pense aussi

    Citation Envoyé par theMonz31 Voir le message
    Après, qu'est ce qui ne marche pas ? les notifications ?
    comment gères tu les notifications ? par pooling ? par "exceptions" ?
    Mon application fonctionne de la manière suivante (en ne prennant que les points relatifs à mon problème) :
    1. Connexion à l'automate
    2. Mise en surveillance de certaines variables (En résumé, consiste à catcher un événement levé par la dll du fabriquant de l'automate)
    3. Démarrage de l'application terminée


    Ensuite, dès que la valeur d'une variable mise en surveillance est modifiée, un événement (notification) est levé par la dll du fabriquant de l'automate. Il y a plusieurs types de surveillance de modification de variable : OnChange, Pooling. Pour ma part, j'utilise OnChange, qui fonctionne sous WinForms.

    Dans le cas d'une application windows, l'événement remonte correctement. Par contre, dans le cas d'application console ou service windows, l'événement ne remonte pas. C'est un peu comme si l'événement n'était pas catché, alors que le code est le même dans tous mes types d'appli. Je pense qu'il faut que je cherche dans le sens de cette "pompe à message". Il faut que je l'implémente, si cela est possible...

    Merci d'avance !

  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    En gros, la pompe a message qui est présente dans une application Windows et pas dans une application console est une callback qui va être appelé par l'OS pour notifier l'application qu'un événement lui arrive.

    Cette méthode, que l'on peut overrider en .Net avec WndProc était "simulé" dans les application Win32 avec une boucle While() qui faisait un "peek message"
    pour savoir si quelque chose avait été envoyé à la fenêtre. C'est une notion plutot propre aux applications fenêtrées.

    Je pense que tu peux chercher de la doc sur la "gestion d'une pompe" à message pour un service.. Mais dans la mesure ou un service n'est pas dépendant d'une fenêtre, je pense que cela n'est pas initialement prévu lorsque tu crées un service.

    Maintenant, il me semble tout à fait possible qu'un service puisse réagir à des notifications venant de "matériel"..

    Il te faudrait peut-etre investiguer d'avantage du coté de la DLL qui te fournit les notifications pour savoir quel moyen elle utilise pour le faire. Il y a fort à parier, vu le comportement que tu n'as pas en console, que cette DLL envoie un message Windows (SendMessage) à son parent.. Et évidemment, si c'est cette situation la qui a lieu, il sera logique qu'une application console ne "reçoive" pas cet événement.

    Après, quelles solutions de contournement... Je dirais, si tu fais le barbare, que ton application Console pourrait embarquée une fenêtre non visible qui "catchera" les notifications... (c'est du barbare, mais çà de permettrait rapidement de valider que la source du non fonctionnement est bien lié à ce comportement de pompe à message)...

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

Discussions similaires

  1. utilisation de system("ping 129.0.0.1");
    Par arnaudperfect dans le forum C
    Réponses: 3
    Dernier message: 02/01/2008, 11h47
  2. [Débutant] Utilisation de "system"
    Par SebRs dans le forum Débuter
    Réponses: 16
    Dernier message: 25/04/2006, 23h44
  3. [C#] System.ComponentModel.Browsable
    Par AdriM dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/04/2006, 17h11
  4. [Kylix] PB Utilisation libc.system
    Par Louargant Bertrand dans le forum EDI
    Réponses: 1
    Dernier message: 19/06/2003, 18h36
  5. [Stratégie] Utiliser un systeme de bufferisation
    Par arnolanf dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 31/10/2002, 16h49

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