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 :

[C#] Mon Thread ferme mon application [Débutant]


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 37
    Points : 31
    Points
    31
    Par défaut [C#] Mon Thread ferme mon application
    Bonjour je suis un débutant en programmation et je suis sur un projet qui a pour but de télécharger un fichier en ligne avec la fonction downloadFile() mais j'ai un problème assez gênant c'est que quand je lance un thread avec ma fonction mon application ce ferme mais le fichier et bien télécharger.

    je lance mon Thread comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Thread th = new Thread(this.Update);          
                th.Start();
    et voici ma fonction :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    public void Update()
            {
                cf.xmlStream("config.xml");
     
                string pathVersion = cf.xmlReadNodeChild("pathversion");
                string pathDownload = cf.xmlReadNodeChild("pathdownload");
     
                //check online
                version = _WebClient.DownloadString(pathVersion);
     
                //xml
                string xmlVersion = cf.xmlReadNodeChild("version");
     
                //Checked version
                if (version == xmlVersion)
                {
                    //on met le statut a jour
                    label1.Content = "Votre Jeu et a jours";
                    button2.IsEnabled = true;
                    //MessageBox.Show("done");//un test pour voir si la condition est bien respecté
     
                }
                else if (version != xmlVersion)
                {
                    //on telecharge
                    _WebClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                    _WebClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Progress);
                    _WebClient.DownloadFileAsync(new Uri(pathDownload), "" + core.pathDownload() + @"\" + "config1111.xml");
     
                    label1.Content = "Téléchargement en cours";
     
                }
                else
                {
                    MessageBox.Show("Erreur le fichier n'as pas pu etre télécharger peut etre est il inexistant");
     
                }
                //
     
     
     
            }
     
            public void Completed(object sender, AsyncCompletedEventArgs e)
            {
                cf.xmlStream("config.xml");
                cf.xmlChangeValueNode("version", version);
                
                label1.Content = "Votre Jeu et a jours";
                button2.IsEnabled = true;
     
            }
     
            public void Progress(object sender, DownloadProgressChangedEventArgs e)
            {
                double bytesIn = double.Parse(e.BytesReceived.ToString());
                double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
                double percentage = bytesIn / totalBytes * 100;
     
                progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
            }
    Alors voila, si vous pourriez me venir en aide je vous en serais très reconnaissant.

    Merci.

  2. #2
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    Ça nous aide pas que ton application se ferme toute seule. Ajoute des try/catch dans ton application et tu verras où est l'erreur.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    public void Update()
    {
         try
         {
                cf.xmlStream("config.xml");
     
                string pathVersion = cf.xmlReadNodeChild("pathversion");
                string pathDownload = cf.xmlReadNodeChild("pathdownload");
     
                //check online
                version = _WebClient.DownloadString(pathVersion);
     
                //xml
                string xmlVersion = cf.xmlReadNodeChild("version");
     
                //Checked version
                if (version == xmlVersion)
                {
                    //on met le statut a jour
                    label1.Content = "Votre Jeu et a jours";
                    button2.IsEnabled = true;
                    //MessageBox.Show("done");//un test pour voir si la condition est bien respecté
     
                }
                else if (version != xmlVersion)
                {
                    //on telecharge
                    _WebClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
                    _WebClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Progress);
                    _WebClient.DownloadFileAsync(new Uri(pathDownload), "" + core.pathDownload() + @"\" + "config1111.xml");
     
                    label1.Content = "Téléchargement en cours";
     
                }
                else
                {
                    MessageBox.Show("Erreur le fichier n'as pas pu etre télécharger peut etre est il inexistant");
     
                }
                //
          }
          catch (Exception theException)
          {
                 //Code pour gérer l'exception
          }
     
     
            }
     
            public void Completed(object sender, AsyncCompletedEventArgs e)
            {
             try
             {
                cf.xmlStream("config.xml");
                cf.xmlChangeValueNode("version", version);
     
                label1.Content = "Votre Jeu et a jours";
                button2.IsEnabled = true;
           }
          catch (Exception theException)
          {
                 //Code pour gérer l'exception
          }
     
            }
     
            public void Progress(object sender, DownloadProgressChangedEventArgs e)
            {
         try
         {
                double bytesIn = double.Parse(e.BytesReceived.ToString());
                double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
                double percentage = bytesIn / totalBytes * 100;
     
                progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
          }
          catch (Exception theException)
          {
                 //Code pour gérer l'exception
          }
     
            }
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    Bonsoir, merci pour ton aide la prochaine fois je m'y prendrais a 2 fois avant de poster ^^ donc j'ai eu cette erreur :
    Le thread appelant ne peut pas accéder à cet objet parce qu'un autre thread en est propriétaire
    Une petite recherche sur google et je suis tomber sur le forum de Developpez sur un sujet concernant mon problème (http://www.developpez.net/forums/d10...-proprietaire/)

    et j'ai donc résolu mon problème comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                    if (!object.ReferenceEquals(System.Windows.Threading.Dispatcher.CurrentDispatcher, Application.Current.Dispatcher))
                    {
                        Application.Current.Dispatcher.Invoke(new Action(() => { button2.IsEnabled = true; label1.Content = "Votre Jeu et a jour"; }));
                    }
                    else
                    {
                        MessageBox.Show("Erreur dispatcher");
                    }
    Merci beaucoup.

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

Discussions similaires

  1. Faire en sorte que le bouton Home ou Back ferme mon application
    Par samzk dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 23/06/2011, 09h48
  2. [WD15] WaitForMultipleObjects dans un thread bloque mon application
    Par peijnoob dans le forum WinDev
    Réponses: 1
    Dernier message: 22/04/2010, 11h39
  3. Rien ne ferme mon application
    Par bvsud dans le forum Langage
    Réponses: 5
    Dernier message: 12/02/2010, 03h19
  4. j'arrive pas a arreter mon thread d'arriere-plan
    Par ms91fr dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2003, 21h36

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