Actie als toets wordt ingedrukt

Status
Niet open voor verdere reacties.

Rex 1241

Gebruiker
Lid geworden
22 nov 2009
Berichten
96
Ik heb een programma met C# geschreven, dit is een command-line OS.

nu wordt er tijdens het opstarten een lijst met 2 opties weergegeven.

Hoe kan ik ervoor zorgen dat dit alleen weergegeven wordt als de gebruiker op L drukt? en dat anders meteen een actie wordt uitgevoerd (dus niet dat de gebruiker een andere toets oid moet indrukken)
 
mogelijke oplossing

Hey,

Ik heb wat zitten zoeken en testen en meen een oplossing te hebben gevonden. Met gebruik van de Thread.Sleep() methode is het mogelijk je app. te laten wachten. Indien er in de tijd dat het wacht geen 'L' word getypt, kan je een bepaalde methode laten oproepen die verschilt van als je wel 'L' in typt.

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace slaaptest
{
    class Program
    {
        
        static void Main(string[] args)
        {
            Thread.Sleep(5000);
            string letter = "";
            letter = Console.ReadLine();
            
            if (letter.Equals("L"))
            {
                Thread.Sleep(0);
                Console.WriteLine("iets");
                
                
            }
            else if(letter.Equals(""))
                Console.WriteLine("anders");
            
                
                
        }

        
    }
}

Dit stukje code wacht voor 5 seconden. Als er op het einde geen L is ingevoerd zal het 'anders' afdrukken. Indien wel drukt het 'iets' af. Het enige nadeel (vind ik) is dat je wel op enter moet drukken, ook als je geen invoer wenst in te geven.
Maar daar zal ook wel een oplossing voor bestaan.
Hopelijk helpt dit.
 
Bedankt indres :thumb:,

maar dit is toch niet helemaal wat ik zoek ;)

Ik wil dus dat je binnen een bepaalde tijd (dus bijv. 5 seconden) op L moet drukken (dus niet alleen ná maar ook tijdens die 5 seconden), en dat je dus voor 'anders' geen toets hoeft in te drukken
 
Hey,

Ik dacht het al. Maar als je wat met de code speelt denk ik wel dat er een oplossing mogelijk is die aanleunt bij wat je wilt bereiken. De Thread.Sleep() methode zal wel te onderbreken zijn, maar ik zit op het moment in blok, dus raad ik je aan wat opzoekwerk te doen. Alles is echt te vinden op het net :)
Veel geluk


deze sites behandelen ongeveer de zelfde vraag als jij stelt:

http://bytes.com/topic/c-sharp/answers/257935-waiting-timer-event-console-application
http://stackoverflow.com/questions/2714691/wait-set-time-for-user-input-c-console-app
 
Ook even wat gepuzzeld en hier is mijn oplossing
Code:
using System;
using System.Timers;

namespace ConsoleApplication
{
    class Program
    {
        static readonly Timer WaitingTimer = new Timer(5000);
        static void Main()
        {
            WaitingTimer.Elapsed += WaitingTimerElapsed;
            WaitingTimer.Start();

            while (WaitingTimer.Enabled)
            {
                if (Console.KeyAvailable)
                {
                    var ch = Console.ReadKey(true);
                    if (ch.KeyChar.Equals('L'))
                    {
                        Console.WriteLine("L ingetoetst");
                        WaitingTimer.Stop();
                    }
                }
            }
        }

        static void WaitingTimerElapsed(object sender, ElapsedEventArgs e)
        {
            Console.WriteLine("wachttijd voorbij");
            WaitingTimer.Stop();
        }
    }
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan