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 :

communication entre deux instance d'une même application [FAQ]


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 27
    Points : 17
    Points
    17
    Par défaut communication entre deux instance d'une même application
    Bonjour,

    je viens de trouver sur la fac c# une réponse à la question suivante http://faqcsharp.developpez.com/?pag...gleinstanceapp

    mais, ce que j'aimerrai savoir, c'est comment faire passer un message d'une instance à une autre instance de mon application.


    Merci beaucoup pour votre aide.

  2. #2
    Membre éclairé
    Avatar de Emerica
    Profil pro
    Consultant
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Points : 724
    Points
    724
    Par défaut
    Techniques courantes :

    - Partage d'espace mémoire
    - .NET Remoting

    Concernant ton lien, si ton application implément un singleton, elle ne pourra guère communiquer localement vu qu'une seul instance ne sera autorisé.
    Some of the world's greatest feats were accomplished by people not smart enough to know they were impossible.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    merci pour votre répense.

    à propos du Partage de l'espace mémoire??

    es que vous pouvez me donner plus détails ?

    Merci.

  4. #4
    Membre éclairé
    Avatar de Emerica
    Profil pro
    Consultant
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Points : 724
    Points
    724
    Par défaut
    C'est pas natif .NET, mais ca marche bien. C'est basé sur les API Win32 OpenFileMapping et CreateFileMapping entre autres.

    Il existe des articles/exemples de wrappers en C#:
    http://www.google.ch/search?hl=en&q=...G=Search&meta=
    Some of the world's greatest feats were accomplished by people not smart enough to know they were impossible.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    ça me semble un peu compliqué ça!

    par contre, es que ça vous semble raisonnable si j'essaye de résoudre ça par une communication à travers un port réseau.


    Merci pour votre aide.

  6. #6
    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
    tu peux faire de l'échange via Fichiers (protegé par Mutex)

    Tu peux faire de l'échange avec de la mémoire partagée...

    Tu peux faire de l'échange avec le Remoting() (mais ca implique les notions
    de "client" "serveur"...)

    et tu peux faire de l'échange via socket... mais , c'est pas forcement plus
    simple...

    Peut-etre que si tu nous dis le type de données que tu veux partager, nous
    pourrons t'orienter vers une solution la plus pertinente pour toi

    (mais seulement si tu veux bien nous en dire plus hein )

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

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    salut,
    en effet je veux avoir seulement une seule instance de mon application .

    et lorsque un utilisateur lance une deuxième instance, je veux recupèrer les arguments passés à celle-ci dans ma première insatance.

    merci.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 62
    Points
    62
    Par défaut Peut-être une autre solution...
    Tu pourrais aussi imaginer d'utiliser une "mailbox" MSMQ entre tes différentes instance d'application... Une boîte aux lettres où tu viendrais poser des "messages" et les chercher...

    Cordialement

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    il me semble que la solution la plus simple, est l'échange à travers des fichiers.

    mais par contre, je pense à créer pour chaque message un fichier.
    les fihciers seront crés dans un dossier survèillés par un FileSystemWatcher.

    et dès qu'une instance envoi un nouveau message (ie: crée un nouveau fichier)

    une notification sera déclenché dans l'autre instance...


    que pensez-vous de cette solution?

    Merci.

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Les NamedPipe pourraient constituer une solution assez propre et plutot simple qui permettrait de tester grace à l'existence du pipe la présence d'une instance existante.
    http://www.codeguru.com/csharp/cshar...cle.php/c7259/
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    oui, je pense que c'est la bonne solution pour faire communiquer deux application sur une meme machine, mais dans mon cas, la communication se résume juste sur le passage d'arguments d'une instance à une autre.

    j'ai fainalement opté pour la solution basé sur l'echange via des fichiers. elle me parit tres efficace pour le moment.

    Merci beaucoup à vous tous pour votre aide

    Samir.

  12. #12
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Cette classe n'est pas de moi et à vrai dire je ne sais même pas où je l'ai trouvé
    Cependant elle fonctionne parfaitement pour mes applications et n'utilise aucun fichier temporraire...

    Pour l'utiliser fait un truc du genre :
    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
    39
    40
    41
    42
    43
    44
    45
     
    [STAThread]
            static void Main(string[] args)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
     
                if (SingleInstanceApplication.AlreadyExists &&
                    SingleInstanceApplication.NotifyExistingInstance(args))
                    return;
                SingleInstanceApplication.Initialize();
                SingleInstanceApplication.NewInstanceMessage += new NewInstanceMessageEventHandler(SingleInstanceApplication_NewInstanceMessage);
                try
                {
     
                    /* ... */
     
                    Application.Run(form);
                }
                finally
                {
                    SingleInstanceApplication.Close();
                }
            }
     
    static void SingleInstanceApplication_NewInstanceMessage(object sender, object message)
            {
               string[] args = null;
                try
                {
                    args = (string[])message;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(String.Format("Erreur interne, impossible de récupérer les arguments d\'instance\n{0}",
                        ex), "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
     
                if (args != null && form != null)
                {
                    /* maintenant tu peut traiter les arguments */
                    form.ProcessArguments(args);
                    form.Activate();
                }
            }

Discussions similaires

  1. Synchroniser des données entre plusieurs instances d'une même application
    Par wil4linux dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 12/02/2013, 13h58
  2. Drag and Drop entre deux instances d'une même application
    Par befalimpertinent dans le forum C++
    Réponses: 1
    Dernier message: 23/11/2010, 14h33
  3. communication entre 2 instances d'une application access
    Par funkyjul dans le forum VBA Access
    Réponses: 11
    Dernier message: 11/04/2008, 07h23
  4. Différencier les instances d'une même application
    Par Laurent.B dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 4
    Dernier message: 19/09/2006, 16h00
  5. Réponses: 2
    Dernier message: 09/06/2006, 19h34

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