Bonjour,

Je ne suis pas expert des dispatcher et du Threading. Du coup j'ai une question.
Je vais commencer par expliquer le contexte. Je récupère des données petit à petit par un script qui tourne en arrière plan (rempli un buffer). J'ai une fonction pour ajouter les données à différents graphiques. Cela se passe bien entre 20 et 100 fois (un nombre de fois très aléatoire). Après mon Dispatcher arrête de faire son job. Voici mon 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
 
        public void UpdateDatas(TestResult result, List<Tuple<int, int>> modifiedRows)
        {
            if (GraphInformation.Selection.XAxisData == null || result == null)
            {
                CreateGraphLinesCollection();
                return;
            }
 
            Dispatcher.InvokeAsync(new Action(() =>
            {
 
                var selection = GraphInformation.Selection;
                XAxisLabel = selection.XAxisData.ChannelMetadata.DisplayName + GetFormattedUnitOfMeasure(selection.XAxisData.ChannelMetadata);
                Y1AxisLabel = GetYAxisLabel(selection.Y1AxisDataCollection);
                Y2AxisLabel = GetYAxisLabel(selection.Y2AxisDataCollection);
                try
                {
                    lock (_graphLinesLock)
                    {
                        foreach (var yData in selection.Y1AxisDataCollection)
                            AddGraphLine(Axis.AxisY1, selection.XAxisData, yData, result, modifiedRows);
 
                        foreach (var yData in selection.Y2AxisDataCollection)
                            AddGraphLine(Axis.AxisY2, selection.XAxisData, yData, result, modifiedRows);
 
                        RemoveExtraLines();
                    }
                 }
                 finally{
                    lock (_graphLinesLock)
                    {
                        DoPropertyChanged(() => GraphLines);
                        InitializeMinAndMax();
                        UpdateAxesVisibilities();
                    }
                 }
 
            }));
 
        }
Si je mets un breakpoint à la ligne Dispatcher.InvokeAsync, on y passe toujours même quand les data ne sont pas ajoutées à mes graphs.... mais on ne passe plus dans l'action. Ce qui est très embetant.
Ce que j'ai essayé:
  • Utiliser un BeginInvoke, pas de changement
  • Ajouter un .Wait(newTimeSpan(2000)) après le InvokeAsync(). Pas de changement.
  • J'ai tenté de faire un timer pour créer un timeout, sans succès.
  • Shutdown le dispatcher chaque 20 passage. Il n'ajoutera plus les données.

Voici aussi quelques liens sur les quelles je me suis penchés; https://stackoverflow.com/questions/...invoke-hanging, https://learn.microsoft.com/en-us/do...owsdesktop-7.0, https://stackoverflow.com/questions/...-my-dispatcher, https://learn.microsoft.com/en-us/do...owsdesktop-7.0

Peut-être que j'ai mal compris ce que j'ai lu. En espérant que quelqu'un a une piste ou peut m'expliquer un peu mieux comment fonctionne ses dispatcher.
Merci beaucoup et n'hésitez pas à me poser des question