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 :

mon application est bloquée, freeze


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut mon application est bloquée, freeze
    Bonjour comment lancer l'attente d'un programme ou lancer un traitement assez long sans freezer mon application !

    impossible lors du sleep de deplacer mon application, de la reduire etc....

    merci d'avance

    voila mon code simple, on click sur un bouton qui lance un sleep, ou bien une boucle de 1 à 1000000, impossible durant le traitement de deplacer la form

    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
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace TestPause1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void btnENVOYER_Click(object sender, EventArgs e)
            {
                WaitTime(10);
            }
     
     
     
     
            private void WaitTime(int attendre)
            {
                while (0 < attendre)
                {
                    System.Threading.Thread.Sleep(1000); // 1 secondes 1000
                    attendre = attendre - 1;
                    //lblATT.Text = SIMNLib.cFonctions.RightChaine(string.Format("  {0}  ", att), 5);
                    //lblATT.Refresh();
     
                }
     
            }
        }
    }

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Lance ton processus dans un autre thread

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut
    voila j'ai fait un thread pour lancer le sleep mais ca bloque toujours mon application !

    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
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
     
     
    namespace TestThread2
    {
        public partial class Form1 : Form
        {
     
            private Thread t;
            private Label labelTest;
            private delegate void ChangeLabel(string str);
     
            public Form1()
            {
                InitializeComponent();
     
                this.labelTest = new System.Windows.Forms.Label();
                this.labelTest.AutoSize = true;
                this.labelTest.Location = new System.Drawing.Point(29, 23);
                this.labelTest.Size = new System.Drawing.Size(106, 13);
                this.labelTest.Text = "Label avant opération";
                this.Controls.Add(this.labelTest);
     
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                t = new Thread(new ThreadStart(ThreadMethod));
                t.Start();
     
            }
     
            private void ThreadMethod()
            {
                this.Invoke(new ChangeLabel(ChangeLabelText), "Label après opération");
                //les instuctions se trouvant ici seront appelées
                //une fois la méthode ChangeLabelText executée et terminée.
                MessageBox.Show("Invoke terminé");
     
            }
     
            private void ChangeLabelText(string str)
            {
                labelTest.Text = str;
                Thread.Sleep(5000);
            }
     
     
     
     
        }
    }

  4. #4
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Réponse à la va-vite.

    Thread.Sleep(5000);
    doit se trouver avant l'appel à

    this.Invoke(new ChangeLabel(ChangeLabelText), "Label après opération");
    En effet dans le code présenté, le Sleep se trouve dans le thread de l'interface, et donc le bloque.

  5. #5
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Essaye de passer par un backgroungworker sinon.
    Il gérera pour toi la création d'un thread dans lequel tu pourras effectuer le traitement volumineux.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Par défaut
    Effectivement en deplacant le sleep c est ok

    mais dans ce cas la mon programme principal continu d'avancer et n'attend pas la fin du traitement du thread

    le but est de faire une pause dans le traitement et le reprendre la ou il en etait

    j'ai des progres a faire dans la gestion des threads

    donc je reprend le but est de lancer un traitement (une boucle qui traite un fichier et envoi par email les infos) mais il faut au bout de 5 minutes de traitement mettre celui en pause durant 1 heure et reprendre la ou on en etait !

    Merci de m'aider

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

Discussions similaires

  1. comment savoir si mon application est ouverte sur un poste distant
    Par melancolie dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 08/02/2011, 10h15
  2. Réponses: 20
    Dernier message: 18/05/2008, 16h33
  3. Réponses: 5
    Dernier message: 15/06/2007, 14h56
  4. [Access] Mon application est détruite !!!
    Par mathias dans le forum Access
    Réponses: 4
    Dernier message: 26/06/2003, 14h14

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