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 :

[VB.NET2005]Problème avec GIF dans une picturebox


Sujet :

Windows Forms

  1. #1
    Dnx
    Dnx est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    Points : 154
    Points
    154
    Par défaut [VB.NET2005]Problème avec GIF dans une picturebox
    Bonjour à tous,

    j'ai un petit souci avec un gif dans une picturebox

    voici la situation :

    j'ai une "form" principale (on va l'appeler FORM_A) avec laquelle je peux lancer plusieurs "forms" (on va les appeler FORM_B) , chaque FORM_B est lancée dans un thread a part... dans les FORM_B, j'ai une picturebox qui contient un gif (gif de progressbar betement)
    le problème est que parfois ce gif génère une erreur et le programme tourne encore si je clique sur "continue" mais la picturebox se tape une grosse CROIX ROUGE...

    avez vous une idée?

    merci d'avance

  2. #2
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    click droit sur l'image / propriété...
    Oooooooh le chemin indiqué n'est pas bon !! ca alors

  3. #3
    Dnx
    Dnx est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    Points : 154
    Points
    154
    Par défaut
    ???

    lol quand même pas si facile

    ce n'est pas ça vu que le gif est direct chargé dans l'assembly

    le gif est bien dans la picturebox et ca marche mais dès fois (pas tt le tps) il arrive de péter un cable et de m'afficher une messagebox qui me dit que l'object is already in use... et apres grosse croix rouge...

    je ne comprends vraiment pas vu que les forms sont bien lancés dans un thread différent...

  4. #4
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Ton gif il est chargé en static dans ta classe FORM_B ?
    Ou y'en a une copie différente qui est chargé pour chaque instance ?

  5. #5
    Dnx
    Dnx est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    Points : 154
    Points
    154
    Par défaut
    static...

    en fait c'est une meme form lancée X fois dans X thread différents

    bàt

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Hello,

    Tu dois pas manipuler des objets GUI (fenêtres, contrôles, ...) depuis un autre thread que le thread principal, car ces objets ne sont pas thread safe et tu risques de les mettre dans un état indéfini. Chez moi d'ailleurs, instancier un formulaire et l'affecter aux enfants de la fenêtre parente depuis un autre thread est déjà problématique sans aller plus loin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ThreadStart ts = delegate()
                     {
                         Form f = new Form();
                         f.MdiParent = this; // à l'intérieur de la fenêtre parente (this)
                         f.Show();
                     };
     
    for (int i = 0; i < 5; ++i)
         new Thread(ts).Start();
    déclenche une exception puisque tu fais cette action depuis un autre thread (ce comportement n'est vrai que depuis la version 2 du framework, avant cela était "faisable" sans exception mais les problèmes survenaient aléatoirement ensuite ).

    Je ne sais donc pas comment tu arrives déjà à franchir cette première étape sans obtenir d'exception, mais soit. Il est très probable que manipuler tout ceci depuis des threads différents les fasse ensuite déconner. Cela m'est arrivé plus d'une fois avec le framework 1.0 alors que je n'étais pas au courant de cette obligation.

    Tu dois utiliser les méthodes Invoke de tes composants (si InvokeRequired est à true) pour effectuer des actions depuis un autre thread. Depuis ton thread qui doit créer une fenêtre, appelle form1.Invoke() en lui passant un délégué chargé d'ajouter une fenêtre fille.

    Bonne chance

  7. #7
    Dnx
    Dnx est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    Points : 154
    Points
    154
    Par défaut
    Merci pour ces conseils.

    Mais je ne travaille pas avec avec une MDI parent mais bien une form parent (thread principal) qui lance N forms comme ceci :

    double clique sur une treeview pour lancer une form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      Dim nThread As New Thread(AddressOf newThread)
      nThread.Start()
    Procédure du thread lancé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     Private Sub newThread()
     
            Dim frm As New MainReader
     
            frm.setComputerName = Me.txtBxComputerName.Text.Trim
     
            frm.setSelectedQueue = Me.TreeView.SelectedNode.Text
     
            Application.Run(frm)
     
        End Sub
    Voila en gros, ça marche mais parfois ça déconne comme expliqué au dessus

    (je vais regarder de plus pres les invoke et invokerequired parce que je ne comprends rien pour l'instant lol)

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Okay. Deux choses :

    1) Comme dit dans mon post précédent, il ne faut pas traiter tes fenêtres dans un thread différent comme tu le fais dans ton bout de code. Je n'en vois d'ailleurs pas l'utilité, dis-nous ce que tu cherches à faire et nous trouverons sûrement une solution.

    2) Application.Run() ne doit pas être utilisée ici ! form.Show() ou form.ShowDialog(), selon le comportement que tu veux obtenir (fenêtre modale ou non), doit être appelée pour afficher la fenêtre.

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/04/2007, 16h17
  2. Problème avec Insert dans une table contenant deux clés
    Par pure_blue dans le forum Accès aux données
    Réponses: 5
    Dernier message: 23/10/2006, 19h32
  3. [Conception] Problème avec INSERT dans une TABLE
    Par dunbar dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 20/07/2006, 12h56
  4. [PL SQL] Problème avec 'case' dans une fonction
    Par divail dans le forum Oracle
    Réponses: 14
    Dernier message: 13/03/2006, 15h50
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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