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.