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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Dnx
    Dnx est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    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 Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    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 éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    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 Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    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 éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 290
    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 éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 105
    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

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