Bonjour,

Je vous expose mon problème, j'ai un programme qui travaille avec deux thread. Le premier, sert à afficher des positions en temps réel sur une map, et le second écoute une variable ( dont la valeur initiale est à 0) à partir d'une web méthode, de telle façon à ce qu'un évènement soit enclenché lorsque cette variable passe à 1.

Le problème est que la variable ne veut pas passer à 1 !! ( Alors qu'elle le devrait, d'ailleurs si je travaille sans threading elle passe bien à 1, sous les même conditions).

Voici le code :
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  int StillLookingFor=0;
   public DrivingMode()
        {
            InitializeComponent();
            Coord.ReadCoordinatesFromGPSSimulator2(DriverCoord);
            monThread1 = new Thread(new ThreadStart(ListeningPedestrianThreading));
            monThread2 = new Thread(new ThreadStart(CallPositionsThreading));
            monThread2.Start(); // On lance le thread permettant l'affichage temps réel des positions.
            monThread1.Start(); // On lance le thread de lecture d'évenements. 
       
        }

   
       private delegate void ListeningPedestrianThreadingDelegate();

        private void UpdateListenerPedestrian()
        {
            if (this.InvokeRequired)
            {
              
                this.Invoke(new ListeningPedestrianThreadingDelegate(UpdateListenerPedestrian));
                return;
            }

            PickMeUp_Mobile_BusinessLayers.DrivingMode driving = new PickMeUp_Mobile_BusinessLayers.DrivingMode();
            StillLookingfor = driving.WaitingForSomeoneAskingMe(idMotorist, ref idPedestrian);
 
            // l'indicateur reste à 0!!
            up.Text = "" + StillLookingfor.ToString();
            if (StillLookingfor==1)
            {
                // Ce bloc n'est jamais exécuté car la variable reste à 0
                monThread1.Abort(); // On stoppe le thread1
                monThread2.Abort(); // On stoppe le thread2
                StartTheSpeech(); // On appelle la méthode StartTheSpeech
            }
           
        }

        private void StartTheSpeech()
        {
            
             txtSpeech.Enabled = true;
             txtSpeech.Visible = true;
        }
    // Cette partie, concerne le thread qui fonctionne bien
   // celui de l'affichage temps réel des positions, je le mets quand même

    private void CallPositionsThreading()
        {
            if (nbr_position < 15)
            {
                UpdateCarPosition(nbr_position);
                Thread.Sleep(0);
            }
        }

        private delegate void CallPositionsThreadingDelegate(int nbr_position);
        private void UpdateCarPosition(int nbr_position)
        {
            if (this.InvokeRequired)
            {
                // we were called on a worker thread
                // marshal the call to the user interface thread
                this.Invoke(new CallPositionsThreadingDelegate(UpdateCarPosition), new object[] { nbr_position });
                return;
            }

         
            Coord.GetJustOnePosition(positions,DriverCoord,nbr_position);
            DisplayMapFromOneCoord(positions, drivingmodemap.Height, drivingmodemap.Width,500);
     
        }
Donc les deux thread sont : ListenerPedestrianThreading et CallPositionsThreading, celui qui fonctionne bizarrement est le 1er. ( le second est ok, du moins les positions sont bien affichées comme voulu!)
La méthode : WaitingForSomeoneAskingMe, fonctionne correctement en principe car comme je l'ai dit précédemment sans multithreading, la variable passait bien à 1.
Peut être que le traitement est long, et que le thread n'a jamais le temps de lire la variable convenablement?

Il ya aussi un autre problème au niveau des Abort();, apparemment ils ne fonctionnent pas comme je le pensais, j'ai écrit le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
  private void menuItem1_Click(object sender, EventArgs e)
        {
            monThread1.Abort();
            monThread2.Abort();
            Close();
        }
Pourtant, lorsque je clique sur menuItem1 les thread ne s'arrêtent pas !

Pourquoi ?

Je vous remercie pour votre aide