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

C# Discussion :

Gif qui ne veut pas disparaitre après traitement


Sujet :

C#

  1. #1
    Membre expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 161
    Points : 3 693
    Points
    3 693
    Par défaut Gif qui ne veut pas disparaitre après traitement
    Bonsoir,

    J'ai crée un BackgroundWorker pour faire un traitement et j'ai une gif circulaire qui tourne pendant le traitement.

    Cependant, lorsque le traitement est finie, le gif ne veut pas disparaitre :'( .

    Si je le mets dans l'évènement DoWork, il y a un conflit de thread . Et de plus, la méthode RunWorkerCompleted ne s'enclenche pas nan plus.

    Voici la partie du code en question:

    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
    private void Key_Click(object sender, EventArgs e)
            {
                if (System.IO.File.Exists(@".\BUS\BServeur.dll"))
                {
     
     
                    this.pictureBox1.Image = Image.FromFile(@".\Load.gif");
                    this.pictureBox1.Visible = true;
                    this.bgwDesign.RunWorkerAsync();           
     
     
                }
                else
                {
                    MessageBox.Show("Le fichier " + System.IO.Directory.GetCurrentDirectory() + @"\BUS\BS.txt" + " n'a pas pu être ouvert.\nVérifier le chemin du fichier.");
                }
     
     
     
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void bgwDesign_DoWork(object sender, DoWorkEventArgs e)
            {
                ExcelTest eT = new ExcelTest();
                NameValueCollection cles = new NameValueCollection();
                eT.CreateKey();
                cles = eT.GetCles(); 
    //Quand je mets le picturetool.visible = false; ici ça me mets conflit de thread           
     
     
            }
    Comme je le disais mon évènement ne se déclenche pas, mon gif reste toujours à visible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void bgwDesign_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                if (e.Error != null)
                {
                    MessageBox.Show("Une erreur est survenue durant le traitement.");
                }
                else
                {
                    MessageBox.Show("Opération terminée");
                }
                pictureBox1.Visible = false;
            }
    j'ai pourtant bien suivie le tuto du site.

    Bonne soirée.

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    Au lieu de faire un FromImage essaye un FromStream

    Exemple

    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
          try
          {
            using (FileStream fs = new FileStream(curName, FileMode.Open, FileAccess.Read))
            {
              try
              {
                PhotImg = Image.FromStream(fs);
                fs.Close();
              }
              catch
              {
                //  
              }
            }
          }

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par DuyBinh Voir le message
    Si je le mets dans l'évènement DoWork
    , il y a un conflit de thread
    Pour régler ce problème il faut utiliser Invoke pour exécuter le code dans le thread de l'interface graphique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    this.Invoke(
        new MethodInvoker(
            delegate
            {
                this.pictureBox1.Visible = false;
            }));
    Mais de toutes façons c'est plutôt dans le RunWorkerCompleted qu'il faudrait le faire...

    Citation Envoyé par DuyBinh Voir le message
    Et de plus, la méthode RunWorkerCompleted ne s'enclenche pas nan plus.
    Normalement l'évènement RunWorkerCompleted est toujours déclenché, même si le traitement se termine en erreur... vérifie que ta méthode bgwDesign_RunWorkerCompleted est bien associée à l'évènement

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Bonjour

    Je n'avais pas bien fait attention au problème de thread pour lequel Tomlev a donné la réponse.

    Il n'empeche qu'ouvrir une image avec FromFile laisse laisse fichier Image ouvert sans methodes explicite pour le refermer !
    C'est pour cela qu'il est aussi largement préférable de passer par un stream.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par olibara Voir le message
    Il n'empeche qu'ouvrir une image avec FromFile laisse laisse fichier Image ouvert sans methodes explicite pour le refermer !
    C'est pour cela qu'il est aussi largement préférable de passer par un stream.
    Effectivement... d'après la doc :
    The file remains locked until the Image is disposed.
    Mais ce n'est pas vraiment lié au problème de DuyBinh...

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Mais ce n'est pas vraiment lié au problème de DuyBinh...
    En effet ... mais garder dans le dos un fichier implicitement locké n'est jamais bon bon et peut avoir des conséquences imprévues !

  7. #7
    Membre expert
    Profil pro
    Dév
    Inscrit en
    Juin 2007
    Messages
    1 161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 161
    Points : 3 693
    Points
    3 693
    Par défaut
    Bon j'ai résolu mon problème en faisant un autre backgroundWorker vu que je n'avais pas trop de code dans l'ancien. Mais ça n'empêche pas que je ne sais toujours pas pourquoi ça ne marchait pas avant.


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

Discussions similaires

  1. popup qui ne veut pas disparaitre
    Par nsanabi dans le forum ASP.NET
    Réponses: 5
    Dernier message: 18/01/2010, 16h23
  2. objet qui veut pas disparaitre
    Par Pol63 dans le forum VB.NET
    Réponses: 26
    Dernier message: 31/08/2007, 15h25
  3. scrollbar qui ne veut pas disparaitre dans une form
    Par splinternabs dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/02/2007, 00h50
  4. JOptionPane qui ne veut pas se fermer!
    Par benthebest dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 29/12/2005, 22h05
  5. un fichier qui ne veut pas être supprimé!!!!
    Par en_stage dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 22/10/2005, 01h08

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