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 :

Thread fige chargement winform


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Thread fige chargement winform
    Bonjour,

    Je développe actuellement une application en VB.NET et j'étais confronté à un problème de temps de chargement que j'ai partiellement résolu avec Thread. Voici le déroulement :

    1/ démarrage du programme
    2/ instanciation d'objets divers (long)
    3/ affichage d'un formulaire

    J'ai délégué l'étape 2 (instanciation d'objets) à un Thread pour afficher le formulaire le plus rapidement possible. Cependant si je lance le Thread avant l'affichage du formulaire, le formulaire commence à s'afficher (affichage de la winform sans boutons) puis se fige jusqu'à la fin de l'exécution du Thread.
    Si par contre je lance le thread après la demande d'affichage du formulaire, ça fonctionne correctement.

    A noter également que je constate ce problème sur win XP (bi processeur) mais pas sur w2k (mono processeur).


    Voici le code :
    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
     
    Public Sub Main()
     
            Dim myThread As New Thread(New ThreadStart(AddressOf chargerFormulaires))
            myThread.Priority = ThreadPriority.Lowest
            myThread.IsBackground = True
     
    	myThread.Start()        
    	feuille.Show()
     
    End Sub
     
    Public Sub chargerFormulaires()
     
            menupr = New MENUPR()
            enc_rbt = New ENC_RBT()
            det_quit = New DET_QUIT()
            sinistr = New SINISTR()
    	'...etc.
     
    End Sub
    Merci d'avance pour vos explications.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    normalement le thread ne peut pas impacter le temps d'ouverture de la fenetre, ni la figer

    peut etre utilises le booléen crossthread qui permet de taper des controles
    soit tu as codé un truc qui va pas quelque part, mais on a pas assez de code pour en juger ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 682
    Points : 1 952
    Points
    1 952
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    normalement le thread ne peut pas impacter le temps d'ouverture de la fenetre, ni la figer
    Je serais plutot du meme avis, mais si un plus petit processeur/machine ne produit pas la meme chose, je partirais donc sur une piste de charge processeur, donc du/des threads.

    Par contre, pourquoi definir un .IsBackground = True sur un nouveau thread ?
    Que les neurones soient avec toi, jeune padawan.
    Ne pas oublier, qu'un métier, développer être.
    Effectuer des recherches et lire les tutos, avant de poster, tu dois.
    Aucune question technique, faites par MP, tu ne dois.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par Danyel Voir le message
    Par contre, pourquoi definir un .IsBackground = True sur un nouveau thread ?
    moi j'suis plutot pour le IsBackground ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Merci pour vos réponse.

    A priori, et après une petite recherche complémentaire, le IsBackground n'a rien à faire là puisque qu'il définit si le thread sera interrompu ou mené jusqu'à son terme si le processus principal se termine.

    Si IsBackground est à True, le thread peut être arrêté en cours d'exécution et peut potentiellement ne pas se terminer si le processus principal s'arrête avant.

    Donc oublions cette propriété qui ne semble jouer aucun rôle dans mon cas.

    J'ai quelques idées de tests complémentaires pour mon problème de chargement de winform. Je vous tiens au courant après.

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Victoire ! J'ai trouvé. Bon en fait dans le main, une méthode appelait la fonction système SetSysColors(). Je précise que j'ai repris cette application en l'état et elle a été migrée de vb6 à VB.NET donc parfois je tombe sur de vieux restes...

    Toujours est-il que cette vieille fonction système (qui n'a rien à faire dans une application .NET) semble poser problème sous XP (ou avec certains processeurs). Et finalement, avec du recul sur le problème je me dis que le thread n'avait rien à voir là dedans et n'a fait que révéler un problème déjà existant.

    merci à vous deux

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    migrer une appli vb6 à vb.net par l'assistant c'est du n'importe quoi de toute facon ...
    ca fait plus perdre de temps que de la réécrire, vu que ca écrit que des conneries à la vb6 (donc pas orienté ob jet) donc non maintenables
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Entièrement d'accord Pol63. Cependant les contraintes organisationnelles, financières et techniques (et je pourrais ajouter décisionnelles et hiérarchiques) du monde professionnel diffèrent parfois (voire souvent) de l'idéal informatique...

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    qu'on pourrait résumer par les décisions des entreprises sont en décalage avec la réalité, je le sais bien aussi malheureusement ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/07/2010, 17h39
  2. Thread et contrôle WinForm
    Par AoSiX dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/02/2008, 16h19
  3. [VB.NET2005] Threads et chargement de winforms ?
    Par kissskoool dans le forum VB.NET
    Réponses: 9
    Dernier message: 01/10/2007, 15h17
  4. Multi threading et Control Winforms
    Par sylk974 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 30/08/2007, 17h03
  5. [VB.NET][WINFORMS] Multi threading
    Par joKED dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/02/2006, 11h48

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