0

これが私の主な機能です:

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 ループに戻ると、最初のプレスではクリックするCD何もしません。2 回目のプレスでのみです。

関数についても同じことが言えますが、プログラムが次にキーを押したときに応答する前にsetDevPassword()、ユーザーがキーを 2 回押す必要があります。つまり、他の入力関数よりもキーを 1 回押す (何もしない) ことになります。

私の場合、これらのタスクと IsCompleted チェックが本当に良い習慣であるかどうかはわかりませんが、ユーザー入力が非常に「遅れる」理由はありますか? なぜこうなった?

4

0 に答える 0