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 :

la finalisation (dispose) d'une fenêtre met trop de temps à s'exécuter


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 8
    Points
    8
    Par défaut la finalisation (dispose) d'une fenêtre met trop de temps à s'exécuter
    Bonjour à toutes et à tous,

    Je développe actuellement une application en WinForm. Mon projet est en VB.net et j'utilise le framework .NET 2.0
    Un des form du projet ne contient qu'un contrôle WebBrowser. Il est lancé depuis un autre form qui lui passe également une url vers laquel le WebBrowser va naviguer. La page à ouvrir contient un composant qui permet la visualisation et l'annotation de documents numérisés. à la fermeture du form l'instruction :
    MyBase.Dispose(disposing)
    Située dans la méthode :
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    prend parfois beaucoup de temps et gèle reste de l'application qui ne répondra que lorsque l'exécution se sera terminée, parfois au bout de plusieurs minute.
    Après avoir demandé conseil à mes pairs, je dois me tourner vers une solution basé sur un principe multi thread (domaine dans lequel je suis loin d'être expert). Quelle partie de l'exécution de mon application dois je faire porter par un autre thread ? S'agit il du form contenant le WebBrowser qui intègre le composant qui met du temps à libérer ses ressources ?

    D'avance merci pour votre aide.

  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
    en quoi ca t'embetes que la fenetre soit longue à fermer ?
    il est possible d'ouvrir une autre fenetre avant de fermer l'autre

    le dispose est obligatoirement sur le thread principal

    et qu'y a t il exactement sur la fenetre qui met du temps à se fermer ? car il doit etre possible de détruire certaines choses pour gagner un peu de temps
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    Bonjour et merci pour ta réponse (je désespérais d'en obtenir une sur les forums de developpez.com) Le WinForm problématique contient uniquement un WebBrowser qui ne navigue que vers des url qui lui font charger un module (probablement un applet java). ce module permet de visualiser un document papier numérisé et d'y ajouter des annotation et des formes (flèches, rectangles, ect...) à l'origine, lorsque je fermais ce form, ça gelait systématiquement tout le reste de l'appli. J'ai ajouté dans une méthode de prise en charge de l'évenement disposing du form une instruction pour faire naviguer le WebBrowser vers une url String.Empty. le problème survient moins souvent mais fini toujours par arriver. L'application est gelée pendant )plusieurs minutes ce qui n'est pas acceptable. Peut on envisager de décharger spécifiquement les ressources du WebBrowser ?

  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
    apparement le webbrowser à une méthode stop, voir si elle est plus efficace

    sinon, dispose sur le fenetre, fait que dispose est appelé sur tous les controles dessus, donc appeler dispose sur le webbrowser n'est pas utile à mon avis vu qu'il sera appelé

    y a ptete encore un peu à creuse mais il y a une solution efficace (bien qu'étrange), dans le onclosing de ta fenetre, tu fais webbrowser.parent = nothing
    ca détache le webbrowser de ta fenetre, donc la fenetre va pas le disposer, il va continuer de "vivre" jusqu'à que le garbage collector ne décide d'en finir avec lui et ca sera sur un autre thread
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    c'est violent mais ça semble résoudre le problème. Comme il s'agit d'une anomalie qui n'est pas reproductible de façon déterministe, je ne suis pas encore sûr. de toute façon ça ne provoque pas de plantage de l'application et ça ne fait pas monter la charge du processus de mon application sur la mémoire (vérification faite sur le gestionnaire des tâches de windows)
    Merci !

Discussions similaires

  1. [2.x] Débogage pour une fonction prenant trop de temps
    Par fahdijbeli dans le forum Symfony
    Réponses: 7
    Dernier message: 30/08/2012, 14h15
  2. [Lazarus] Automation OOo, une fenêtre de trop
    Par Jon Shannow dans le forum Lazarus
    Réponses: 8
    Dernier message: 04/08/2012, 13h41
  3. Pourquoi ma boucle mets trop de temps à terminer une tache ?
    Par wyzer dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/05/2011, 22h13
  4. Réponses: 1
    Dernier message: 09/02/2008, 18h55
  5. Réponses: 1
    Dernier message: 13/08/2006, 02h38

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