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

Windows Forms Discussion :

Multi threading et Control Winforms


Sujet :

Windows Forms

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 147
    Par défaut Multi threading et Control Winforms
    Bonjour,

    J'ai un souci avec un composant par rapport au multithreading et au coté ThreadSafe des Control Winforms.
    Si quelqu'un le connait, c'est pour le composant C1FlexGrid qui est un composant propriétaire, alliant un TreeView avec une Grid, permettant ainsi de donner un aspect hiérarchique à la Grid.

    Ce composant est un peu le point central du projet, et mon problème est qu'il doit contenir un très grand nombre de données.

    A titre informatif, il prend près de 45 minutes à remplir dans un contexte à thread unique. J'ai donc pensé à multithreader le remplissage, de manière à laisser la main à l'utilisateur, tout en remplissant ma structure.

    Le souci est que le composant hérite de Control, interdisant ainsi son accès dans un autre thread que celui qui l'a créé.

    J'ai bien essayé de créer l'objet dans le thread principal, mais ca m'oblige à faire des Invoke dans mon thread "remplisseur", ce qui gèle le thread principal.

    J'ai également essayé de passer par un DataSource (à savoir un DataTable) ce qui n'est pas adapté à ma problématique, car dans le DataTable, je ne peux pas représenter la structure hiérarchique...

    Je ne vois pas bien comment m'en sortir... et je suis preneur de tout conseil, méthode, astuce de conception...

    Merci.

  2. #2
    _51
    _51 est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 10
    Par défaut
    Citation Envoyé par sylk974 Voir le message
    Bonjour,

    J'ai bien essayé de créer l'objet dans le thread principal, mais ca m'oblige à faire des Invoke dans mon thread "remplisseur", ce qui gèle le thread principal.
    Essaye de remplacer les .Invoke par .BeginInvoke, normalement ca fait un appel asynchrone donc ca devrait plus bloquer.

  3. #3
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    alors, le BeginInvoke a-t-il fonctionné ?

  4. #4
    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
    Le BeginInvoke ne changera rien à mon avis. Le traitement devient asynchrone pour le thread secondaire mais il n'empêche que c'est toujours le thread principal qui va faire le boulot.

    Ce qu'il faut faire je pense c'est séparer tout ce qui est traitement/calcul/récupération de données etc... de ce qui est modification du contrôle. La première partie peut être faite par le thread secondaire qui transmettra ensuite ses résultats au thread principal pour mettre à jour le composant. Si les 45 minutes sont réellements prises par le remplissage du contrôle uniquement, alors aucun multithreading ne règlera l'affaire, mais j'en serais bien étonné.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 194
    Par défaut
    45minutes pour remplir un grid ca veut dire que tu peux faire beaucoup moins en tout cas ...

    sinon un thread secondaire peut avoir accès aux controles du thread principal avec me.checkforillegalcrossqqch = false

    par contre ca ralenti un peu le truc
    tu peux aussi faire un thread secondaire qui remplie une variable et sur le thread principal, un timer qui s'occupe d'utiliser cette variable pour faire le visuel
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Winforms et Multi-threading
    Par CrazyDev dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/09/2007, 18h47
  2. [C# 2.0] Lancer une winform en multi thread
    Par Khrysby dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 11/07/2007, 10h56
  3. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  4. [VB.NET][WINFORMS] Multi threading
    Par joKED dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/02/2006, 11h48
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

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