C
C#4w ago
wickend

Console key input shenanigans

So all i want is to be able to type in things and press esc to call a method but due to me being a dumb person i cant do it and i really could use some help
4 Replies
Angius
Angius4w ago
Console.ReadKey()?
wickend
wickendOP4w ago
from what i know, it just exits when input is given i want to press esc to call a method and be able to type anything in Console.ReadLine() at the same time
Angius
Angius4w ago
Maybe Console.KeyAvailable() running in a task? Something like
using System;
using System.Threading;
using System.Threading.Tasks;

var keyListenerTask = ListenForEscape();

await DoYourMainWork(_cts.Token);

await keyListenerTask;

async Task ListenForEscape()
{
if (Console.KeyAvailable)
{
var key = Console.ReadKey();

if (key.Key == ConsoleKey.Escape)
{
// do your thing
}
}

await Task.Delay(50);
}

async Task MainWork()
{
for (int i = 0; i < 100; i++)
{
Console.WriteLine($"Working... {i}");
await Task.Delay(1000, cancellationToken);
}
}
using System;
using System.Threading;
using System.Threading.Tasks;

var keyListenerTask = ListenForEscape();

await DoYourMainWork(_cts.Token);

await keyListenerTask;

async Task ListenForEscape()
{
if (Console.KeyAvailable)
{
var key = Console.ReadKey();

if (key.Key == ConsoleKey.Escape)
{
// do your thing
}
}

await Task.Delay(50);
}

async Task MainWork()
{
for (int i = 0; i < 100; i++)
{
Console.WriteLine($"Working... {i}");
await Task.Delay(1000, cancellationToken);
}
}
Basically, every 50ms check if a key has been pressed, and if so, do something
wickend
wickendOP4w ago
gonna try that

Did you find this page helpful?