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 :

[C#.NET 2] Thread "en attente"


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut [C#.NET 2] Thread "en attente"
    Bonjour,

    J'aimerai faire des événements en attente d'une action, par exemple un clic sur un bouton déclanche une longue recherche en base afin de remplir un DataGridView. Durant que la recherche se déroule, j'aimerai :
    1) Mettre le curseur de la souris en attente (sablier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.Cursor = Cursors.WaitCursor;
    2) faire une animation, genre barre d'avancement

    Je penses que le Thread peut résoudre mon problème, or je ne sais pas comment m'en servir ?! Déjà, est-ce possible... Et facile ?

    Merci

  2. #2
    Membre Expert Avatar de LooserBoy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 1 085
    Par défaut
    Voici un bout de code qui affiche une forme sur laquelle une picturebox affiche un gif animé.
    Cela peut certainement t'aider... (WIP = Work In Progress )
    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
    public partial class WIP : Form
        {
            public delegate void DelegateCloseWip();
     
            private static WIP _instance;
            private DelegateCloseWip _closeDelegate;
     
            private WIP()
            {
                InitializeComponent();
     
                _closeDelegate = new DelegateCloseWip(InternalClose);            
            }
     
            public static void StartWip()
            {
                Thread InstanceCaller = new Thread(new ThreadStart(MyWipThreadFunc));
                InstanceCaller.Start();
                while (!InstanceCaller.IsAlive) ;
            }
     
            public static void CloseWip()
            {
                try
                {
                    if (_instance != null)
                        _instance.Invoke(_instance._closeDelegate);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
     
            private static void MyWipThreadFunc()
            {
                _instance = new WIP();
                _instance.ShowDialog();
            }
     
            private void InternalClose()
            {
                _instance.Close();
                _instance.Dispose();
            }
        }
    [EDIT]Code complet de ma petite forme.
    Utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    WIP.StartWIP();
    // Traitement long...
    WIP.CloseWIP();
    [/EDIT]
    Fichiers attachés Fichiers attachés

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut
    Merci.

    ça fonctionne bien 1 fois, puis la 2ème fois ça ferme l'appli

    Je vais regarder de plus près (je ne vois pas l'image animé) mais pour le principe ton code m'aide bien, merci.

  4. #4
    Membre Expert Avatar de LooserBoy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 1 085
    Par défaut
    Citation Envoyé par Ticoche Voir le message
    ça fonctionne bien 1 fois, puis la 2ème fois ça ferme l'appli
    C'est en prod...

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Par défaut
    J'ai modifier un peu, pour avoir un curseur sablier, ça fonctionne. Est-ce que ça se fait un type de retour pour ce genre de thread (Cursor) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            public static Cursor StartWip()
            {
                return Cursors.WaitCursor;
            }
     
            public static Cursor CloseWip()
            {
                return Cursors.Default;
     
            }
    édit: Je vois l'image et ça fonctionne bien... UNE fois, après ça ferme la MDI principale mais l'appli tourne toujours !

  6. #6
    Membre Expert Avatar de LooserBoy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 1 085
    Par défaut
    Je pense voir ce qui ce passe...
    Le code que j'ai mis, tu l'a intégré à la forme principale c'est ca?

    Je pense que tu n'as pas tout à fait compris comment fonctionne mon WIP.
    Le WIP est une forme independante.
    Si je reprends ton post original, tu recupere les sources que j'ai mis en piiece jointe. Tu l'ajoute à ton projet puis à l'usage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    This.Cursor = Cursors.Wait;
    WIP.StartWIP();
    // Traitement long...
    WIP.CloseWIP();
    This.Cursor = Cursors.Default;
    En detail, cela permet d'afficher une forme qui affiche ce que l'on veux dans un thread autre que le principal.

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

Discussions similaires

  1. [VB.Net 1.1] Comment "échapper" une quote ?
    Par arnolem dans le forum VB.NET
    Réponses: 1
    Dernier message: 07/09/2006, 10h39
  2. [vb.net] [System.Threading] Etats d'un Thread
    Par arnolem dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/01/2006, 16h41

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