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 :

Main : appelle de methode ou de classe ?


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 63
    Points
    63
    Par défaut Main : appelle de methode ou de classe ?
    Bonjour,

    J'ai une classe A, qui contient une methode abc(),

    Pour l'instant mon main ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public static void Main(String[] argv)
            {
               A demo = new A(3333, 640, 480);
               Application.Run(demo);
             }
    est ce que je peux faire ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     public static void Main(String[] argv)
            {
               A demo = new A(3333, 640, 480);
               abc();
               Application.Run(demo);
             }
    appeler demo.abc() ou A.abc() ne marche pas.

  2. #2
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 63
    Points
    63
    Par défaut
    je dois preciser que je veux que abc() et demo s'éxécute en boucle.

  3. #3
    Membre du Club
    Profil pro
    Développeur .NET
    Inscrit en
    Mai 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 50
    Points : 55
    Points
    55
    Par défaut
    je dois preciser que je veux que abc() et demo s'éxécute en boucle.
    Tu veux dire quoi par "...demo s'éxécute en boucle". demo est une classe donc elle ne peut pas s'exécuter ?

  4. #4
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 63
    Points
    63
    Par défaut
    salut profet,
    si une classe ne peut pas s'executer, ca veut dire quoi ce Application.run ?

  5. #5
    Membre du Club
    Profil pro
    Développeur .NET
    Inscrit en
    Mai 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 50
    Points : 55
    Points
    55
    Par défaut
    Application.run() signifie que tu appelles la méthode (fonction en objet) run qui appartient à Application. Je suis pas un spécialiste .NET, mais il y a deux possibilités :
    • Soit Application est un objet, et run est une méthode d'objet (définie dans la classe de l'objet)
    • Soit Application est une classe, et run est une méthode de classe (Shared) (définie aussi dans la classe de l'objet)

    Mais dans tous les cas on exécute une méthode, pas une classe ou objet.

    salut profet,
    euh, non, c'est pofet

  6. #6
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 63
    Points
    63
    Par défaut
    je viens d'atterir a propos des Application.run(), c'est une WindowForm en fait.
    Le run ne fait qu' "exécuter" les caractéristiques d'une fenêtre : taille, titre, interactivité par Events, en l'occurence des PaintEvents

    Donc appeler une methode de cette WindowForm après le run n'a aucun sens.

    A moins de faire en sorte que cette methode soit appelée, elle, en boucle.
    En laissant cependant un peu de temps via des threads pour laisser respirer la fenêtre.

  7. #7
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 63
    Points
    63
    Par défaut
    Mais comment ? sais pas

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Ton projet contient des Winforms? Sinon tu fais un projet console -_-

    Et sinon, il faut lancer ta Winform avec Run (lancement des écoutes messages, attributon du handle n co...), et lancer un nouveau thread a l'intérieur qui fera tourner en boucle ta méthode. Pour etre exécuté sans instancier un objet, une méthode doit etre static. Mais fait gaffe aux objets que manipule cette meme méthode...

  9. #9
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 63
    Points
    63
    Par défaut
    vEt sinon, il faut lancer ta Winform avec Run (lancement des écoutes messages, attributon du handle n co...), et lancer un nouveau thread a l'intérieur qui fera tourner en boucle ta méthode.
    C'est exactement ce que je fais pour le Run. Mais justement ma question c'est ou exactement lancer le thread ? dans la methode ? et comment la faire tourner en boucle ?

    Concernant la methode static ect, quasiment tout est static dans mon programme, j'ai fais ca a cause de trop nombreux "does not exist in the current context" que j'ai rencontré...

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Dans le constructeur ou page_load de la form, tu lance le thread.

    Pour une boucle infinie tu peux faire while(){} mais cest tout de meme déconseillé ;-) TOn thread ne pourra pas se terminer de lui meme...

    il faut plutot une condition (un bool) avec while(bool){ ... }
    Quand ta condition passe a false, la boucle sarette, et tu peu fermer le thread

  11. #11
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 63
    Points
    63
    Par défaut
    merci chubychuby yeah
    mais quand le thread s arrete tu veux dire Thread.Sleep() ?

  12. #12
    Membre du Club
    Profil pro
    Développeur .NET
    Inscrit en
    Mai 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 50
    Points : 55
    Points
    55
    Par défaut
    Je pense qu'il parle plutôt du traitement du thread. Ton thread a surement un début et une fin. Si le traitement est dans une boucle, tu peux prévoir la condition de sortie.

    Sleep permet de faire une pause.

  13. #13
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 63
    Points
    63
    Par défaut
    Ton projet contient des Winforms? Sinon tu fais un projet console -_-
    Heu... je ne connais/comprends pas. Je dois absolumetn avoir une fenetre.

    Pour etre exécuté sans instancier un objet, une méthode doit etre static. Mais fait gaffe aux objets que manipule cette meme méthode...
    tu veux dire qu'une methode static s'exécute toujours ? sans être appelée/instanciée ?
    Intéressant je ne savais pas mais, comment définir l'ordre des tâches à ce moment là.


    Enfin je ne pense pas que je doivent arrêter mon thread. Car cette methode en question que je veux "looper" est une sorte d'écouteur de mouse events.
    En fait c'est un remplisseur/lecteur de HashTables mais ca revient au même pour ce qui est de la faire tourner en permanence.

  14. #14
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 63
    Points
    63
    Par défaut
    je test ta methode ChubyOne et je tiens au jus

  15. #15
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 63
    Points
    63
    Par défaut
    voilà mon code :

    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
     /*--main--*/
            public static void Main(String[] argv)
            {
     
                TuioDemo demo = new TuioDemo(port, 640, 480);
                WindowManager();
                Application.Run(demo);
     
                // Déclaration du thread
                Thread myThread;
     
                // Instanciation du thread, on spécifie dans le 
                // délégué ThreadStart le nom de la méthode qui
                // sera exécutée lorsque l'on appele la méthode
                // Start() de notre thread.
                myThread = new Thread(new ThreadStart(ThreadLoop));
     
                // Lancement du thread
                myThread.Start();
     
     
              }
     
            public static void ThreadLoop()
            {
    		// Tant que le thread n'est pas tué, on travaille
            	while (Thread.CurrentThread.IsAlive)
            	{
    			// Attente de 500 ms
    			Thread.Sleep(500);
     
    			// Affichage dans la console
    			Console.WriteLine("Je travaille...");
                            WindowManager();//methode static
    	}
    Mais le thread ne travaille jamais

  16. #16
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 167
    Points : 63
    Points
    63
    Par défaut
    Est un problème de multithreading ? Car ma winForm possède au niveau du OnPaint un thread qui dort 50ms en prévision du threa que je viens d'ajouter.
    Mais je n'ai pas de semaphore pour l'instant.

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/06/2014, 16h26
  2. Réponses: 2
    Dernier message: 14/10/2009, 09h31
  3. Réponses: 14
    Dernier message: 10/09/2009, 19h08
  4. Réponses: 13
    Dernier message: 15/11/2005, 15h47
  5. Réponses: 11
    Dernier message: 16/10/2005, 20h21

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