3

ここでは C# を使用します。コンソールアプリを作成しています。テキストを画面に即座に表示するのではなく、テキストをスクロールする方法が 2 つあります。1 つは Console.Write() と同じように機能し、もう 1 つは Console.WriteLine() と同じように機能します。違いは、各文字間に 30 ミリ秒の遅延があることです。キーを押したままにすると、各文字間で最大 5 ミリ秒の遅延が発生するようにしようとしています。問題は、キーを押すと Console.KeyAvailable が true になり、リセットされないため、わずか 5 ミリ秒の遅延で継続することです。これを false に戻す方法はありますか、またはこれを達成するために他にできることはありますか? これが私のコードです:

    //Console.Write() version
    static void RPGWrite(string write)
    {
        char[] writearray = write.ToCharArray();
        int writearraycount = writearray.Count();
        for (int x = 0; x < writearraycount; x++)
        {
            Console.Write(Convert.ToString(writearray[x]));
            if (Console.KeyAvailable == false)
                System.Threading.Thread.Sleep(30);
            else
                System.Threading.Thread.Sleep(5);                   
        }            
    }
    //Console.WriteLine() version
    static void RPGWriteLine(string write)
    {
        char[] writearray = write.ToCharArray();
        int writearraycount = writearray.Count();
        for (int x = 0; x < writearraycount; x++)
        {
            Console.Write(Convert.ToString(writearray[x]));
            if (Console.KeyAvailable == false)
                System.Threading.Thread.Sleep(30);
            else
                System.Threading.Thread.Sleep(5);
        }
        Console.Write("\n");
    }
4

2 に答える 2

4

[nkvu - 他の人に役立つ場合に備えて、コメントからここにアイテムを移動します]

私の知る限り、KeyAvailablefalse に戻すには、実際にストリームからキーを読み取る必要があります (たとえば、 を使用Console.ReadKey)。

を使用Console.ReadKey(true)すると、コンソールにエコー バックせずにストリームから文字が読み取られますが、Alt、Ctrl、または Shift キーを単独で押すことに関する MSDN ドキュメントのコメントに注意してください。

于 2013-03-29T18:12:56.860 に答える
1

これは私のために働いたコードです:

    //Console.Write() version
    static void RPGWrite(string write)
    {
        char[] writearray = write.ToCharArray();
        int writearraycount = writearray.Count();
        for (int x = 0; x < writearraycount; x++)
        {
            if (Console.KeyAvailable == false)
            {
                Console.Write(Convert.ToString(writearray[x]));
                System.Threading.Thread.Sleep(30);
            }
            else
            {
                Console.Write(Convert.ToString(writearray[x]));
                if (x < (writearraycount - 1))
                {
                    x++;
                    Console.Write(Convert.ToString(writearray[x]));
                }
                if (x < (writearraycount - 2))
                {
                    x++;
                    Console.Write(Convert.ToString(writearray[x]));
                }
                if (x < (writearraycount - 3))
                {
                    x++;
                    Console.Write(Convert.ToString(writearray[x]));
                }
                if (x < (writearraycount - 4))
                {
                    x++;
                    Console.Write(Convert.ToString(writearray[x]));
                }
                Console.ReadKey(true);
            }
        }           
    }
    //Console.WriteLine() version
    static void RPGWriteLine(string write)
    {
        char[] writearray = write.ToCharArray();
        int writearraycount = writearray.Count();
        for (int x = 0; x < writearraycount; x++)
        {
            if (Console.KeyAvailable == false)
            {
                Console.Write(Convert.ToString(writearray[x]));
                System.Threading.Thread.Sleep(30);
            }
            else
            {
                Console.Write(Convert.ToString(writearray[x]));
                if (x < (writearraycount - 1))
                {
                    x++;
                    Console.Write(Convert.ToString(writearray[x]));
                }
                if (x < (writearraycount - 2))
                {
                    x++;
                    Console.Write(Convert.ToString(writearray[x]));
                }
                if (x < (writearraycount - 3))
                {
                    x++;
                    Console.Write(Convert.ToString(writearray[x]));
                }
                if (x < (writearraycount - 4))
                {
                    x++;
                    Console.Write(Convert.ToString(writearray[x]));
                }
                Console.ReadKey(true);
            }
        }
        Console.Write("\n");
    }
于 2013-04-01T17:23:14.863 に答える