IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Comment accéder au formulaire dans un BackGroundWorker ?


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 68
    Par défaut [C#] Comment accéder au formulaire dans un BackGroundWorker ?
    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.

    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());
            }
    Sauriez vous comment régler ce problème ?
    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;
                }
    		}
    Images attachées Images attachées  

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Salut,

    Les controles ne doivent etre accédés que par le thread qui les a créé. Plus d'infos ainsi que la solution ici.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 68
    Par défaut
    Merci pour ton aide, j'ai résolu mon pb
    j'ai finalement crée une thread de recuperation des données dans la fenetre mdi fille.
    le traitement est de ce fait ultra rapide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment construire des éléments d'interface dans un backgroundworker ?
    Par billybobbonnet dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 10/09/2014, 14h05
  2. Réponses: 1
    Dernier message: 11/08/2010, 14h19
  3. Comment exporter un formulaire dans excel
    Par branqueira dans le forum Access
    Réponses: 3
    Dernier message: 28/02/2006, 11h35
  4. Réponses: 4
    Dernier message: 10/02/2006, 16h24
  5. Réponses: 3
    Dernier message: 27/10/2004, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo