Bonjour,

Je requiert votre aide une nouvelle fois ! J'ai du mal à gérer l'utilisation de thread pour un travail de synchronisation de données. En effet je dois récupérer les données d'un webservice toutes les X secondes, donc j'ai créer un dispatcherTimer afin de faire le travail de rafraichissement en arriere plan ...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 dispatcherTimer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(10) };
                dispatcherTimer.Tick += dispatcherTimer_Tick;
                dispatcherTimer.Start();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
  private void dispatcherTimer_Tick(object sender, EventArgs e)
        {
            WebClient client_quest = new WebClient();
 
            client_quest.DownloadStringAsync(new Uri("http://www.techdevmobile.fr/happyconf/index.php/private/api/get_questions/" + info_conf.id));
            client_quest.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadQuestConf);
        }
Donc jusque la ca va a peu près, seulement dans la fonction qui récupère le Telechargement des données (client_DownloadQuestConf) je créé dynamiquement des onglets (pivot), du contenu pour ces onglets, des eventHandler sur des boutons etc, etc ... Ce qui fait énormément de données a recalculer ...

Voici un petit plan de ce que je fais dans cette fonction :

1 - je lance une progressbar , et je deserialise mes données Json
2- Je crée plusieurs éléments (grid, stackpanel, button ...) que j'ajouterais dans une listbox se trouvant dans un pivotitem
3- Je place des eventhandler sur les boutons , ils enverront des données au serveur quand on appuiera dessus, donc de nouveau webclient...

Voici la fonction en question :

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
75
76
77
78
79
80
81
82
83
84
85
86
private void client_DownloadQuestConf(object sender, DownloadStringCompletedEventArgs e)
        {
            myProgressBar.IsEnabled = true; //load progress bar TAVU
            myProgressBar.IsIndeterminate = true;
            myProgressBar.Visibility = System.Windows.Visibility.Visible;
 
            if (e.Error == null)
            {
                var resultat = JsonConvert.DeserializeObject<List<QuestConf>>(e.Result);
                int i = 0;
                foreach (rubrique rub in info_rubrique)
                {
                    PivotItem myNewPivotItem = new PivotItem();
                    myNewPivotItem.Name = "piv_" + rub.id;
                    //ID of the pivot 
 
                    myNewPivotItem.Header = rub.name;
                    Grid myNewGrid = new Grid();
                    ScrollViewer scroll = new ScrollViewer { VerticalScrollBarVisibility = ScrollBarVisibility.Visible};
 
                    StackPanel stack = new StackPanel();
                    foreach (QuestConf quest in resultat)
                    {
                        if (quest.question.category == rub.id)
                        {
                            TextBlock question = new TextBlock();
                            question.FontSize = 21;
                            question.TextWrapping = TextWrapping.Wrap;
                            question.VerticalAlignment = System.Windows.VerticalAlignment.Top;
                            question.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
 
                            question.Text = quest.question.name + "\n";
                            stack.Children.Add(question);
 
                            foreach (Answer ans in quest.answers)
                            {
 
                                   var resp = new Button();
                                    resp.Click += (sender1, eventArgs) =>
                                    {
                                        WebClient client_answer = new WebClient();
                                        client_answer.DownloadStringCompleted += (send, down) =>
                                            {
                                                if (down.Result != "done")
                                                    MessageBox.Show("Erreur lors de l'envoi de données : " + down.Result);
                                                else
                                                {
                                                    resp.Content = "Requete envoyé !";
                                                }
                                            };
                                        client_answer.DownloadStringAsync(new Uri("http://www.techdevmobile.fr/happyconf/index.php/private/api/send_answer/" + info_conf.id + "/" + info_user.id + "/" + quest.question.id + "/" + ans.id));
 
                                    };
 
                                    resp.Content = ans.label;
                                    stack.Children.Add(resp);
                                                           }
                        }
 
                    }
 
                    scroll.Content = stack;
 
                    myNewGrid.Children.Add(scroll);                 
                    myNewPivotItem.Content = myNewGrid;
                    myNewGrid.VerticalAlignment = System.Windows.VerticalAlignment.Top;
 
                    myNewGrid.Width = 410;
                    myNewGrid.Height = 325;
 
                    //add pivot to main list
                    pivotMainList.Items.Add(myNewPivotItem);
                    TextBlock txt = new TextBlock();
                    txt.Text = "> " + rub.name;
                    txt.FontSize = 35;
                    lstItemsToList.Items.Add(txt);
                    i++;
                }
            }
            else
                MessageBox.Show("Impossible de récupérer les données sur internet : " + e.Error);
            myProgressBar.IsEnabled = false;
            myProgressBar.IsIndeterminate = false;
            myProgressBar.Visibility = System.Windows.Visibility.Collapsed;
 
        }
Je précise que cette fonction est la fonction que j'utilise également au lancement de la page pour créer tout le contenu d'une partie de la page, donc je me demande s'il ne serait pas possible de recharger uniquement les téléchargement de données, mais je ne vois pas du tout comment faire cela .... Si vous pouviez m'éclairer une nouvelle fois, je vous remercie d'avance.