Bonjour,
Je voudrais pendant le chargement assez long d'une fenetre MDI fille faire evoluer un progressbar dans la fenetre principale MDI parent.
La fenetre MDI fille charge à son démarrage un ensemble assez important de données via une base Oracle.
Sauriez vous comment régler ce problème ?
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 /// <summary> /// Ouvre la fenêtre FormRPS : Fenêtre contenant les données RPS. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <remarks>La fenêtre fille MDI s'ouvre avec une instance unique. /// Il est donc impossible d'ouvrir 2 FormRPS en même temps </remarks> private void taskItem1_Click(object sender, System.EventArgs e) { Activeprocessing(true); backgroundWorker1.RunWorkerAsync(); Activeprocessing(false); backgroundWorker1.CancelAsync(); } <------ Erreur Inter-Thread Ici /// <summary> /// Procédure d'ouverture d'une fenêtre MDI fille. /// </summary> /// <remarks>Si la fenêtre est déjà ouverte, alors cette fenêtre devient visible</remarks> /// <param name="pFormName"></param> /// <param name="pFormType"></param> private void OpenUniqueForm(string pFormName,Form pFormType) { Form[] ChildrenForms = this.MdiChildren; foreach (Form chform in ChildrenForms) { if (chform.Name== pFormName) { chform.Visible=true; return ; } } Form NewMdiChildForm = pFormType; NewMdiChildForm.MdiParent=this; NewMdiChildForm.Visible=true; } /// <summary> /// Procédure indiquant un etat de traitement long de l'application /// </summary> /// <param name="pOnProcessing">Paramètre Booléan indiquant l'atat On/Off du processing</param> private void Activeprocessing(bool pOnProcessing) { if (pOnProcessing) { Cursor.Hide(); progressBarWait.Enabled = true; progressBarWait.Visible = true; labelWait.Visible = true; } else { Cursor.Show(); progressBarWait.Enabled = false; progressBarWait.Visible = false; labelWait.Visible = false; } } private void backgroundWorker1_ProgressChanged_1(object sender, ProgressChangedEventArgs e) { this.progressBarWait.Value = e.ProgressPercentage; } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { OpenUniqueForm("FormRps",new FormRps()); }
vous pourrez voir un annexe l'erreur.
Merci d'avance pour votre aide
j'a iessayé avec ceci mais sans resultat : même erreur :
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 delegate void SafeOpenUniqueForm(string pFormName, Form pFormType); /// <summary> /// Procédure d'ouverture d'une fenêtre MDI fille. /// </summary> /// <remarks>Si la fenêtre est déjà ouverte, alors cette fenêtre devient visible</remarks> /// <param name="pFormName"></param> /// <param name="pFormType"></param> private void OpenUniqueForm(string pFormName,Form pFormType) { Form[] ChildrenForms = this.MdiChildren; foreach (Form chform in ChildrenForms) { if (chform.Name== pFormName) { chform.Visible=true; return ; } } Form NewMdiChildForm = pFormType; if (NewMdiChildForm.InvokeRequired) { SafeOpenUniqueForm MyDelegate = new SafeOpenUniqueForm(OpenUniqueForm); this.Invoke(MyDelegate, new object[] { pFormName, pFormType }); } else { NewMdiChildForm.MdiParent = this; NewMdiChildForm.Visible = true; } }
Partager