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 :

Form show par événement téléphonique [Débutant]


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2006
    Messages : 128
    Points : 61
    Points
    61
    Par défaut Form show par événement téléphonique
    Bonjour,

    Je reprends le temps des congés une application winform commencé par mon responsable.
    Je suis beaucoup plus habitué à l'environnement Web (Asp.net/vb/SQL)

    ici il s'agit d'une application en C#. je vais éviter tout les a côtés, juste exposé ce qui marche et ma problématique.

    J'ai 3 fichiers :
    - Connexion.cs (formulaire avec un label)
    - CTIListener.cs
    - CallSnapShot.cs

    au lancement de l'application, j'ai le listener qui se présente sous la forme d'une icone dans la section à droite dans la barre de tâches (zone de notification)
    au clic dessus j'ai un ToolStripMenuItem qui s'ouvre faisant apparaitre 2 ligne : mon nom utilisateur windows et une ligne "Quitter"
    Quand je clic sur mon nom, j'ai un formulaire qui s'ouvre (connexion.cs)

    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
     
    Public class CTIListener
    ...
     
      private void openPamarForm_Click(object sender, EventArgs e) { ShowParamForm(); }
     
            private void ShowParamForm()
            {
                if (paramForm == null)
                {
                    paramForm = new Connexion();
                    paramForm.Closed += paramForm_Closed; // avoid reshowing a disposed form
                    paramForm.Show();
                }
                else { paramForm.Activate(); }
     
            }
     
            private void paramForm_Closed(object sender, EventArgs e) { paramForm = null; }
     
    ...
    End Class
    ceci marche correctement.

    Mon soucis est le suivant :

    Lors du lancement de l'application, j'ai le démarrage d'une instance de CallSnapShot :
    Listener
    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
     
    ...
    CallSnapShot css = new CallSnapShot();
    css.login = usr.slogin;
    css.pwd = usr.spassword;
     
    //Ajouté par moi :
    CallSnapShot.DelegateAppel delegateAppel = css_Appel ;
    css.Appel += delegateAppel;
     
    // Pas par moi :
    css.call();
     
     
    ...
     
     
    //Ajouté par moi :
    private void css_Appel(CallSnapShot sender , string numero)
            {
     
                string t = "TEST";
     
     
                if (paramForm == null)
                {
                    paramForm = new Connexion();
                    //paramForm.setNum("TEST");
                    paramForm.Closed += paramForm_Closed; // avoid reshowing a disposed form
                    paramForm.Show();
                }
                else { paramForm.Activate(); }
     
            }
    En fait css.call() lance une écoute (Téléphonie IP) et déclenche des événements
    dans CallSnapShot.cs, j'ai réussi à me mettre dans l'événement déclenché, un événement que vous voyez ajouté au dessus par moi dans le listener


    j'ai ajouté :
    CallSnapShot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     public delegate void DelegateAppel(CallSnapShot instance, string numero);
     public event DelegateAppel Appel;
    ....
     string num = callingDevice.Value;
     Appel(this,num);
    à l'origine à la place des lignes d'événement, mon responsable avait tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cForm = new Connexion();
    cForm.setNum(callingDevice.Value);
    cForm.Show();
    Le formulaire s'affichait bien mais on n'avait pas la main (curseur qui tourne, opaque, comme ci le formulaire était planté et de plus pas mis à jour car le numéro n’apparaît pas)

    je me suis souvenu d'une chose, de ma petite expérience Win : c'est qu'il faut que ce soit le thread principal qui mettent à jour l'application ( d'ou mes ajouts d'événements)

    mais j'obtiens exactement la même chose dans "css_Appel" avec mes modifications. De ce fait je ne vois pas comment faire.

    D'avance, Merci de votre aide.
    -----------------------------------------
    à l'origine PHP/Mysql. Pro : Asp.net/Vb/SQL/Webform siteweb

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Tu n'a pas de gestion de Thread dans le code que tu présentes.
    Si on s'en tient à ce que tu nous montre, tu as déjà tout dans le Thread principal.
    Et dans ce cas, si tu te contente d'afficher la fenêtre, ça ne devrait pas géner de freeze.

    Tu dois avoir du code qui prend du temps à s'exécuter dans ta fenêtre Connexion.
    En gros la partie du code qui pose problème est justement celle que tu n'a pas montré

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2006
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par popo Voir le message
    Tu n'a pas de gestion de Thread dans le code que tu présentes.
    Si on s'en tient à ce que tu nous montre, tu as déjà tout dans le Thread principal.
    Et dans ce cas, si tu te contente d'afficher la fenêtre, ça ne devrait pas géner de freeze.

    Tu dois avoir du code qui prend du temps à s'exécuter dans ta fenêtre Connexion.
    En gros la partie du code qui pose problème est justement celle que tu n'a pas montré
    Résolu depuis, le thread principal est dans le websocket du composant allant interroger la centralisation des lignes téléphonique. (ce que j'ai découvert avec des crashs d'applications ou a un moment sur la centralisation des lignes il y avait encore des instance et répondait de plus en plus lentement (pas que pour moi))

    depuis j'ai procédé ainsi :
    un form principal dans lequel ça contient les différentes interrogation et retour d'événements depuis le composant.
    je n'ai du coup qu'une seule invocation à faire pour mise à jour de l'état de ma ligne téléphonique, qui en fonction de ceci mets à jour les formulaires :
    exemple déclenchement d'une popup, au décrochage, création d'une fiche d'appel, fermeture de la popup, le tout sans avoir à faire des invocations partout.
    C'est par hasard que je suis tombé la dessus en voyant à un moment donné que quelque chose créer par une méthode issu de l'invocation devenait autonome.

    dans le code fourni à l'origine, c'était le form principal qui était passé dans d'autres form, et devait donc à chaque fois être l'initiateur de l'événement, car pour savoir l'état de la ligne on repartait dans le form.
    -----------------------------------------
    à l'origine PHP/Mysql. Pro : Asp.net/Vb/SQL/Webform siteweb

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. On submit non pris en compte si form soumis par onClick
    Par romulus dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 02/10/2006, 17h43
  2. Etat, mise en forme différente par detail
    Par Kinian dans le forum IHM
    Réponses: 4
    Dernier message: 06/05/2006, 12h07
  3. [Javascript] Form. valider par js, comment prevoir si js pas activé
    Par budiste dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/03/2006, 16h42
  4. [MySQL] Une liste déroulante affichant les données d'une requête SHOW par ordre alphabétique
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 22/12/2005, 15h53
  5. Réponses: 3
    Dernier message: 02/12/2004, 08h50

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