Bonjour,
J'ai un souci avec le backgroundworker, et je souhaite savoir si quelqu'un peut m'aider. mon application est composé d'un TabControl auquel est aloué dynamiquement un controle utilisateur.
Quand je fonctionne en monothread, il n'y a pas de souci. Mais ceci demandant beaucoup de ressources et affectant un freeze de mon interface graphique, j'ai décidé de le mettre une partie du traitement dans le backgroundWorker.
mon backgroudworker est créé dans la form principale. elle fait appel à une méthode qui va se charger d'alouer dynamiquement des controles utilisateur dans les TabPages correspondant.
Tout ceci à l'air de fonctionner jusqu'au moment où je souhaite afficher le tour (dans la méthode du backgroundworker : RunWorkerCompleted). Je demande l'affichage via des méthodes. Et voici le message d'érreur qui j'ai à l'execution :
Voici la partie du code du backgroundworker :Opération inter-threads non valide : le contrôle 'StatsTab' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
La méthode qui affiche le tout dans l'interface principale :
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 public void AddClient(AveragesData[][] Data) { //this.DelAllClientTabs(); CurrentData = Data; ClientStat = new SimotionTab[Data.Length]; //create as many Simotion tab's group as number of client LoadForm = new Loading(); backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { for (int Client = 0; Client < CurrentData.Length; Client++) { ClientStat[Client] = new SimotionTab(); ClientStat[Client].Dock = DockStyle.Fill; ClientStat[Client].BackColor = Color.LightGray; ClientStat[Client].AddSimotionTab(CurrentData[Client]); } } private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { ClientTabControl = new TabControl(); for (int Client = 0; Client < CurrentData.Length; Client++) { this.ClientTabControl.TabPages.Add(CurrentData[Client][0].ClientName); this.ClientTabControl.TabPages[Client].Controls.Add(ClientStat[Client]); } this.ClientTabControl.Dock = DockStyle.Fill; this.Controls.Add(ClientTabControl); this.QuickMenu.Visible = true; Sender.showClienttab(); }
Pouvez-vous m'aider car je ne retrouve pas ce genre de problème sur google?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void showClienttab() { this.splitContainer1.Panel2.Controls.Add(clientTab1); }
Partager