Partage
  • Partager sur Facebook
  • Partager sur Twitter

C# Opération inter-threads non valide

Sujet résolu
    17 janvier 2020 à 16:28:45

    Bonjour à tous,

    J'ai un petit soucis, mon but est de faire un UserControl composer d'un DockManager (DevExpress) et d'ajouter un certain nombre d'élément dans ce DockManager.

    Les éléments a ajouté sont des requêtes provenant d'un autre UC et peuvent être parfois longue a être exécuté, j'aimerai donc lancer tout cela en parallèle via des threads afin qu'une requête longue ne bloque pas l'affichage de toutes celles qui suivent. 

    J'ai donc ce code via un Parallel.ForEach: 

        Parallel.ForEach(ds.List_Stat_TDB, stat =>
                  {
    
                      DockPanel dockPanel = dockManager1.AddPanel(DockingStyle.Bottom);
                      dockPanel.Text = stat.titre; 
                      dockPanel.Options.AllowFloating = false; 
                      dockPanel.Options.ShowAutoHideButton = false;
                      dockPanel.Options.ShowMaximizeButton = false;
                      ucInfoCentre uc = new ucInfoCentre(null, null, stat.id, null); // UC qui exécute la requête 
                      dockPanel.ControlContainer.Controls.Add(uc);
                      uc.Dock = DockStyle.Fill;
    
                  });

    J'ai cette exception au niveau de la ligne AddPanel :

    System.InvalidOperationException : 'Opération inter-threads non valide : le contrôle 'UCtdb' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.'

    J'ai pu voir sur le net que l'on ne pouvait pas modifier les éléments UI dans plusieurs thread mais les solutions apporté ne sont pas parvenu à résoudre ma problématique. 
    J'ai également essayé de mettre tout cela dans un Invoke mais j'ai eu cette exception : 

    System.InvalidOperationException : 'Impossible d'appeler Invoke ou BeginInvoke sur un contrôle tant que le handle de fenêtre n'a pas été créé.'

    Je dois certainement m'y prendre mal mais je suis preneur si qqn pouvait m'indiquer la marche à suivre 

    Merci à vous :D



    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2020 à 16:38:11

      Ce que vous avez trouvé sur le net est correct.

      Vous avez vraisemblablement lancé votre travail dans un thread auxiliaire trop tôt dans le cycle de vie de votre formulaire/Page.

      Ne lancez vos traitements qu'après le "Load" de votre conteneur d'UC.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        22 janvier 2020 à 16:04:03

        bacelar a écrit:

        Ce que vous avez trouvé sur le net est correct.

        Vous avez vraisemblablement lancé votre travail dans un thread auxiliaire trop tôt dans le cycle de vie de votre formulaire/Page.

        Ne lancez vos traitements qu'après le "Load" de votre conteneur d'UC.


        Merci pour votre aide ! j'ai fais un appel aux traitements qu'à partir de l'event Load de l'UC et ça à l'air de fonctionner ! 

        • Partager sur Facebook
        • Partager sur Twitter

        C# Opération inter-threads non valide

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown