これが私の主な機能です:
var configKey = Task.Factory.StartNew(acceptConfig);
var devKey = Task.Factory.StartNew(acceptDevMode);
while (true)
{
doSomething();
if (configKey.IsCompleted)
{
getFirstChoice();
getSecondChoice();
getThirdChoice();
configKey = Task.Factory.StartNew(acceptConfig);
}
if (devKey.IsCompleted)
{
setDevPassword();
getFirstChoice();
getSecondChoice();
getThirdChoice();
devKey = Task.Factory.StartNew(acceptDevMode);
}
}
そして、これらは私の機能です:
private static void acceptConfig()
{
var key = Console.ReadKey(true);
while (key.Key != ConsoleKey.C)
{
key = Console.ReadKey(true);
}
}
private static void acceptDevMode()
{
var key = Console.ReadKey(true);
while (key.Key != ConsoleKey.D)
{
key = Console.ReadKey(true);
}
}
これらは基本的に私のgetChoice
機能です:
var key = Console.ReadKey(true);
switch (key.Key)
{
case ConsoleKey.D1
...
そして、これは私のsetDevPassword()
機能です:
private static void setDevPassword()
{
password = Convert.ToInt32(Console.ReadLine());
}
C私の問題は、最初にまたはが押されたときを除いてD、プログラムが応答するためにユーザーがキーを2回押す必要があることです。すべてgetChoice
の機能で、ユーザーは数字を 2 回押す必要があり、メインの while ループに戻ると、最初のプレスではクリックするCかD何もしません。2 回目のプレスでのみです。
関数についても同じことが言えますが、プログラムが次にキーを押したときに応答する前にsetDevPassword()
、ユーザーがキーを 2 回押す必要があります。つまり、他の入力関数よりもキーを 1 回押す (何もしない) ことになります。
私の場合、これらのタスクと IsCompleted チェックが本当に良い習慣であるかどうかはわかりませんが、ユーザー入力が非常に「遅れる」理由はありますか? なぜこうなった?