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

VB.NET Discussion :

[VB.NET] Création et ouverture d'objet - temps énorme


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut [VB.NET] Création et ouverture d'objet - temps énorme
    Bonjour,

    Je pilote une imprimante d'étiquette via VB.
    Pour ce faire, j'ai ajouté la .tlb proposé par le constructeur, j'importe le namescpace, puis je crée l'objet et je l'ouvre et bah bien sûr je m'en sers.
    Tout fonctionne très bien SAUF que le temps de création et d'ouverture surtout (pour aller parcourir mon layout .lbl ...) prends un temps énorme, et ca donne l'impression que le boutton ou en fait le programme a planté.
    Solution: j'ai déplacé la création et l'ouverture de l'objet dans le chargement de l'MDI, comme ca ,j'ai résolu le problème du boutton, mais le chargement plante d'un seul coup (une 50 aines de secondes) , moi je sais d'où ca vient, alors je patiente, mais pour un utilisateur, il va mettre sa main sur son coeur et espérer que son PC ne va pas exploser...enfin bon que soit, je veux qu'au moment de chargement ouvrir une fenêtre en paralèlles que que la chargement pour dire à l'utilisateur une sage phrase comme "Patientez SVP" ou "Création d'Objet" ou quelque choses comme ca; surtout que je ne veux pas voir les utilisateurs avec des aires débiles devant mon application dès le premier lancement. Avez vous une idée?

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Par défaut
    Salut
    Je suis pas sûr d'avoir bien compris. Tu cherches a afficher un message pendant la 1ère création d'une form (assez lente le temps de builder), c'est cela?
    Si oui, pourquoi ne pas utiliser un backgroundWorker (voire un thread) associé à un timer qui affichera le message pendant qu'en fond tu créeras ta form?

  3. #3
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Moi je suis sûr que tu a bien compris ! juste tes propositions m'ont l'air en chinois, non! faut pas exagérer, j'en ai tiré le mot Timer (que j'utilisais en VB6 dans la nuit des temps) ..., si tu veux expliquer un peu plus, nous seront moi et tout les utilisateurs reconnaissants à tigunn!

    Merci

  4. #4
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Par défaut
    Flate, Flate, Flate
    Euhm bon ok... Voici un exemple d'utilisation d'un backgroundworker (System.ComponentModel.BackgroundWorker) pour la restauration d'une base de données SQL Serveur.
    Bouton "lancer la restauration"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ButtonRestaurer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonRestaurer.Click
          If MsgBox("Cette opération va modifier de façon définitive la base de donnée." & vbCrLf & "En cas de restauration a partir d'une ancienne sauvegarde, le programme risque de ne plus fonctionner, Voulez vous continuer? ", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
             RestaurationEnCour = True
             Me.BGWRestauration.RunWorkerAsync() 'lance la tache en fond
          End If
       End Sub
    Traitement de la tache en fond (auto):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub BGWRestauration_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGWRestauration.DoWork
     
    ...
    End Sub
    Et en fin de traitement (auto):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub BGWRestauration_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BGWRestauration.RunWorkerCompleted
          RestaurationEnCour = False
          If Me.LabelMessage.Text = "erreur lors de la restauration" Then
             Me.Close()
             Master.Close()
          Else
             Me.Close()
             Application.Restart()
          End If
       End Sub
    Ceci n'est qu'un exemple mais je pense que cela devrait être utile.
    Bon dev'

  5. #5
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Super !

    je me suis enfin basé sur le tuto de LARDE Geoffrey :

    http://glarde.developpez.com/dotnet/bgworker/vb/

    Merci tigunn pour le backgroundworker, et merci à sperot pour l'explication du thread (dans un autre poste).

  6. #6
    Membre éclairé Avatar de tssi555
    Analyse système
    Inscrit en
    Juillet 2008
    Messages
    594
    Détails du profil
    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2008
    Messages : 594
    Par défaut
    Me voilà de retour, j'ai le tuto du BackgoundWorker mais je ne sais pas bien m'en servir.

    Quand je lance mon application (démarre directement avec une MDI), je charge des objets et j'ouvre des layouts. le problème c'est que l'interface gel, et on ne peut cliquer sur rien! quelque secondes après, l'application de décontracte et fonctionne normalement.

    Je exploiter la puissance du BackGroundWorker pour arriver à :

    Charger l'application avec une petite interface au milieu (de l'MDI), cette interface comprendra un progresse barre qui me donnera l'etat de chargement et l'ouvreture des layouts (le traitement lourd).

    Sauf que je ne sais pas bien comment procéder?

    Merci de votre aide.

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

Discussions similaires

  1. VB.NET Création dynamique de nom d'objets
    Par PizzaBer dans le forum Windows Forms
    Réponses: 5
    Dernier message: 08/11/2006, 10h41
  2. [VB.NET] Création d'objet dynamique
    Par Torkan dans le forum Windows Forms
    Réponses: 9
    Dernier message: 29/05/2006, 03h18
  3. [VB.NET] Création de control après ouverture du form
    Par boulete dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/03/2006, 12h06
  4. [CR][VB.NET]Création d'un état
    Par rolan dans le forum SDK
    Réponses: 10
    Dernier message: 30/09/2004, 11h24
  5. [Debutant VC++.net] Obtenir un pointeur sur objet
    Par SteelBox dans le forum MFC
    Réponses: 6
    Dernier message: 17/06/2004, 18h36

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