Partage
  • Partager sur Facebook
  • Partager sur Twitter

C# méthodes simultanées

En C# comment faire fonctionner deux fonctions à la fois ?

    26 juillet 2019 à 15:02:39

    Bonjour tout le monde,

    J'ai terminé d'étudier le tutoriel : Apprenez à développer en C#.

    Par rapport au dernier chapitre « Console ++ », Je me suis donné un exercice qui est de bouger à mon gré la voiture du sous-chapitre « Déplacez du texte » tout en écoutant en boucle la musique du sous-chapitre « Jouez un son basique »

    J'ai donc combiné de plein de façons différentes ces deux codes :

      • Déplacez du texte :

    private static void Main(string[] args)
    {
        int i = 0;
    	int j = 0;
    	int largeur = 21;
    	int hauteur = 4;
    	Console.WriteLine(@"      .--------.");
    	Console.WriteLine(@" ____/_____|___ \___");
    	Console.WriteLine(@"O    _   - |   _   ,*");
    	Console.WriteLine(@" '--(_)-------(_)--'");
    	while (true)
    	{
    		ConsoleKeyInfo info = Console.ReadKey(true);
    		switch (info.Key)
    		{
    			case ConsoleKey.LeftArrow:
    				if( i > 0 )
    				{
    					Console.MoveBufferArea(i, j, largeur, hauteur, i - 1, j);
    					i--;
    				}
    				break;						 
    			case ConsoleKey.RightArrow:
    			    if (i < Console.WindowWidth - largeur)
    			    {
    				    Console.MoveBufferArea(i, j, largeur, hauteur, i + 1, j);
    				    i++;						 
    			    }
    				break;						 
    			case ConsoleKey.UpArrow:
    				if( j > 0 )
    				{
    					Console.MoveBufferArea(i, j, largeur, hauteur, i, j - 1);
    					j--;
    				}
    				break;						 
    			case ConsoleKey.DownArrow:
    				Console.MoveBufferArea(i, j, largeur, hauteur, i, j + 1);
    				j++;
    				break;
    		}
    		if (info.Key == ConsoleKey.Q)
    			break;
    	}
    }
      • Jouez un son basique (évidement je l'ai mis dans une boucle "while" pour mon exercice) :

    int noteDo = 262;
    int noteRe = 294;
    int noteMi = 330;
    int noire = 400;
    int blanche = 800;
    
    Console.Beep(noteDo, noire);
    Console.Beep(noteDo, noire);
    Console.Beep(noteDo, noire);
    Console.Beep(noteRe, noire);
    Console.Beep(noteMi, blanche);
    Console.Beep(noteRe, blanche);
    Console.Beep(noteDo, noire);
    Console.Beep(noteMi, noire);
    Console.Beep(noteRe, noire);
    Console.Beep(noteRe, noire);
    Console.Beep(noteDo, noire);

    Je n'ai pas eu le résultat attendu car soit ces codes s'exécutent l'un après l'autre ou il faut que j'appuie sur une touche pour que la musique joue et après la voiture bouge et cela se répété après chaque fois que je fais bouger la voiture.

    D'où la question que me je me pose : En C# comment faire fonctionner deux méthodes à la fois ? Ou du moins comment donner à l'utilisateur l’impression qu'elles fonctionnent en même temps ?

    Je ne vous montre pas mes tentatives personnelles car je ne veux pas charger ce message encore plus qu'il ne l'ai déjà.

    Si jamais vous en avez besoin, demandez-moi et je vous enverrai les codes de ces tentatives ratées.

    Je vous remercie par avance pour vos réponses.

    Je vous souhaite une bonne journée et un agréable week-end.

    Bien cordialement.

    Aclanto

    -
    Edité par aclanto 26 juillet 2019 à 15:19:55

    • Partager sur Facebook
    • Partager sur Twitter
      26 juillet 2019 à 15:45:16

      Salut,

      aclanto a écrit:

      D'où la question que me je me pose : En C# comment faire fonctionner deux méthodes à la fois ? Ou du moins comment donner à l'utilisateur l’impression qu'elles fonctionnent en même temps ?


      Je pense qu'il faut que tu regardes des méthodes async et de await.

      Cela te permet d'exécuter certaines portions de codes dans un autre processus (autre thread).

      Je suis pas assez calé pour expliquer clairement les tenants et les aboutissants de ce genre de chose, je te redirige vers un petit tuto

      https://dotnetcodr.com/2014/01/01/5-ways-to-start-a-task-in-net-c/

      En esperant t'avoir aidé,

      Bon courage

      -
      Edité par earp91 26 juillet 2019 à 19:18:03

      • Partager sur Facebook
      • Partager sur Twitter
        27 juillet 2019 à 20:59:26

        Bonsoir earp91,

        Je te remercie pour ton message et pour avoir répondu aussi rapidement.

        J'ai commencé à regarder les méthodes async et await et je vais les étudier plus en détail.

        En faisant des recherches sur ces méthodes j'ai trouvé des liens qui je pense peuvent t’intéresser les voici :

        https://docs.microsoft.com/fr-fr/dotnet/csharp/programming-guide/concepts/async/

        https://docs.microsoft.com/fr-fr/dotnet/csharp/programming-guide/concepts/async/task-asynchronous-programming-model

        Merci encore.

        Très bonne soirée et très bon week-end.

        Bien cordialement.

        Aclanto

        -
        Edité par aclanto 27 juillet 2019 à 21:00:54

        • Partager sur Facebook
        • Partager sur Twitter
          29 août 2019 à 11:15:27

          Les "vraies" API de son sont de "nature" asynchrone de base, car se prendre la tête avec du multi-threading ou await/async juste pour jouer un simple son, c'est un peu overkill.

          Le plus simple est donc d'utiliser une API de plus "haut" niveau que ce bricolage à base de Beep.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            2 septembre 2019 à 11:07:37

            Bonjour tout monde,

            Bacelar, je te remercie pour ta réponse.

            J'ai recherché sur Google quelle API utilisé et je n'ai pas des réponses satisfaisantes.

            Pourrais-tu, s'il te plait Bacelar, me donner un site web où je pourrais trouver une API qui correspondrait à mon, petit "projet" ou le nom d'une API qui serait facile à utiliser car je suis encore très débutant en C#

            Je te remercie par avance.

            Très bonne journée.

            Bien cordialement.

            Aclanto

            -
            Edité par aclanto 2 septembre 2019 à 18:25:30

            • Partager sur Facebook
            • Partager sur Twitter
              2 septembre 2019 à 11:42:26

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                5 septembre 2019 à 19:25:22

                Bonjour Bacelar,

                AH,AH,AH !!!... c'est vraiment très drôle, Bacelar.

                En étant qu' utilisateur de Google tu n'est pas sans savoir que la recherche de certaines questions sur certains thèmes techniques comme sur les API peut être très compliqué et très difficile à trouver sur Google ou les autres moteurs de recherches surtout pour un débutant en programmation comme moi. Hé, oui Google n'a pas réponse à tous.

                Bien que tu sous-entends le contraire, j'ai fait mes recherches sur les API qui sont des interfaces de programmations applicatives et par rapport à ceux qu'il y a ; tu admettras que pour un débutant c'est un sujet qui n'est pas simple donc ce débutant ne peut pas bien le comprendre qu'avec Google. Et les forums sont justement fait pour c'est situation. Et même Google utilise beaucoup les discussions des personnes sur les divers forums pour aider les gens dans leur recherches.

                Ceci dit... tu te moques, tu te moques... mais en attendant tu n'as pas donné de solutions, comment cela se fait-il, si selon toi la solution est si facile à trouver avec Google ?

                Sur ceux, je te souhaite bonne une soirée, Bacelar.

                Cordialement.

                Aclanto

                -
                Edité par aclanto 5 septembre 2019 à 19:46:18

                • Partager sur Facebook
                • Partager sur Twitter
                  5 septembre 2019 à 19:41:49

                  >tu n'a pas donné de solutions

                  Heu, et "soundplayer", c'est du poulet ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                    12 septembre 2019 à 18:39:36

                    Pas oubliger d'utiliser des thread pour ca ..

                    Par exemple pour ta musique , tu peut par exemple decider de jouer une note tous les demi-secondes. Tu aurais un code proche de ..

                    notes [] = { .... }
                    
                    main()
                    {
                       start = now()
                       note = 0
                       playNote = True
                       loop(){
                       
                    		// traitement du deplacement du vehicule
                    		
                    		elapsed = start - now()
                    		if(elapsed >= 0.5){
                    			note = (notes + 1)%nbr_notes;
                    			playNote = True
                    		}
                    		if(playNote){
                    			jouerNote(note)
                    			playNote = False
                    		}
                    		
                    		start = now()
                    	}
                    }




                    Ainsi ton son joura une note a la fois a la vitesse que tu lui aura specifier.

                    -
                    Edité par CrevetteMagique 12 septembre 2019 à 19:03:03

                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 septembre 2019 à 12:08:48

                      Bonjour Zérotisme , bonjour Becelar,

                      Zérotisme, je te remercie pour ta réponse qui me donne de bonnes pistes de réflexion.

                      Becelar, excuses-moi de répondre un peu tard comme j'étais malade et donc je ne pouvais pas te répondre plus tôt.

                      Certes je n'avais pas vu "SoundPlayer" et je te remercie pour ce conseil, cependant vu la manière avec laquelle tu m'as donné ta réponse comment voulais-tu que je devine si c'était du poulet ou autre chose ?

                      Tu aurais pu me faire une réponse plus simple et surtout moins vexante comme par exemple :

                      "Il y a SoundPlayer"

                      Et puis je ne comprend pas car tu as dit :

                      "Le plus simple est donc d'utiliser une API de plus "haut" niveau que ce bricolage à base de Beep."

                      alors que SoundPlayer est une simple classe et non une API.

                      Zérotisme et Bacelar, je souhaite une bonne journée ainsi qu'un bon week-end.

                      Bien cordialement.

                      Aclanto



                      -
                      Edité par aclanto 13 septembre 2019 à 12:09:17

                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 septembre 2019 à 14:01:57

                        >alors que SoundPlayer est une simple classe et non une API.

                        API : Appplication Programming Interface

                        Une classe est une forme (de plus en plus courante avec la généralisation des middlewares objets) d'API.

                        Donnez-moi ce qui fait qu'un classe, une méthode, un assembly etc.. n'est pas une API ?

                        C'est des interfaces de programmation, toutes.

                        En utilisant SoundPlay, ou tout autre API de plus haut niveau (jouer des fichiers de musique et pas des bips) sera bien mieux. Que l'API soit une classe, une méthode, un ensemble de méthode, un ensemble de classe, un framework, une librairie, un assembly, un SDK, etc...

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                          20 septembre 2019 à 19:12:18

                          Bonsoir Bacelar,

                          Je te remercie pour ton message.

                          Comme je te l'ai dit je suis un débutant en informatique ; donc je ne savais pas trop ce qu'est une API. Je pensais qu'une API était plus un assembly ou une bibliothèque ou un framework, enfin un élément de programmation qui justement a une interface comme par exemple « QT ».

                          Et si je t'ai répondu en te disant que « SoundPlayer est une simple classe et non une API ». C'est que je trouve qu'une classe n'a pas vraiment d'interface.

                          J'ai demandé à un ami ingénieur en informatique ce qu'est une API il m'a dit que c'est un terme qui regroupe beaucoup de types d'éléments de programmation et donc qu'on peut dire qu'une classe est une API.

                          Le terme API est tellement vague que j'ai l'impression que même les programmeurs expérimentés ne savent pas trop ce qu'est une API.

                          Je te souhaite ainsi qu'a tout le monde une bonne soirée et un bon week-end.

                          Bien cordialement.

                          Aclanto

                          -
                          Edité par aclanto 20 septembre 2019 à 19:13:29

                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 septembre 2019 à 10:41:28

                            > je trouve qu'une classe n'a pas vraiment d'interface

                            Bien au contraire, une classe bien conçue offre une interface de programmation claire et facile à comprendre et utiliser.

                            C'est même la meilleure définition d'une classe, une entité qui offre un ensemble de service sous forment d'une "interface" cohérente.

                            >Le terme API est tellement vague

                            Tout à fait et c'est fait exprès.

                            Quand on parle d'une API, c'est justement pour ne pas se focaliser sur une manière particulière d'offrir une interface de programmation (classes, assemblies, bibliothèques, framework, WebMethod, envoie de pigeon voyageur, etc...)

                            Oui, je sais, je suis un peu soupe au lait. ;-)

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                              3 octobre 2019 à 18:13:30

                              Bonsoir Bacelar, Bonsoir tout le monde ,

                              Bacelar, je te remercie pour ta réponse.

                              Excuse-moi de te répondre tard, j'ai eu beaucoup de travail ces derniers jours.

                              Grâce à toi Bacelar, maintenant je sais ce que c'est une API.

                              J'utiliserai SoundPlayer et j'essayerai les autre solutions qui m'ont été présenté dans cette discussion ; et quand j'aurais conçu un script ou plusieurs codes qui fonctionnent je le ou les publierai dans cette discussion.

                              Je remercie toutes les personnes qui ont participé à cette discussion.

                              Je souhaite à toutes et à tous une bonne soirée.

                              Bien cordialement.

                              Aclanto

                              • Partager sur Facebook
                              • Partager sur Twitter

                              C# méthodes simultanées

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown