

初歩的な質問ですみません。  
現在while文を回しcount処理を行いフォルダーへの振り分けを行っています。  
countの値が60の倍数になるとき、コンソール画面に文字を出力しようとしています。  
countの値は1秒ごとに増えているはずなのですが、なぜEnterを押さなければ延々と  
"Processing is finished.Please any key!"の文言が表示されるのでしょうか？  
60の倍数の時、キー入力が無ければ文言を一度だけ出したいのです。

[code]

    while(true)
    {
    if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_ATTENTION) != 0)
                        {
                            string fileName = "";
                            Timer timer = new Timer(1000);
    
                            var count = 0;
                            int foldercount = 1;
                            timer.Elapsed += (sender, e) =>
                            {
    
                                String foldercountStr = foldercount.ToString();
                                if (count < 20)
                                {
                                    fileName = fileNameFolder + foldercountStr + "data0to20.txt";
                                    count++;
    
                                }
                                else if (count < 40)
                                {
                                    fileName = fileNameFolder + foldercountStr + "data21to40";
                                    count++;
    
                                }
                                else if (count < 60)
                                {
                                    fileName = fileNameFolder + foldercountStr + "data41to60";
                                    count++;
    
                                }else if (count % 60 == 0)
                                {
                                    fileName = fileNameFolder + foldercountStr + "dataothers";
                                    Console.Beep(10000, 500);
                                    Console.WriteLine("Processing is finished.Please any key!");
                                    ConsoleKeyInfo input = Console.ReadKey();
                                    String strA = "Enter";
                                    if (strA.Equals(input.Key.ToString()))
                                    {
                                        count++;
                                    }
                                    
                                }
                                else
                                {
                                    fileName = fileNameFolder + foldercountStr + "dataothers";
                                    count = 0;
                                    timer.Stop();
                                }
    }
    
[/code]


CC BY-SA 4.0
2021-11-26T06:54:32.867
83814
2021-11-26T09:55:04.280
2021-11-26T06:59:37.043
26370
48762
question
c# visual-studio
while文中の条件分岐について


コードが不完全ですが、 `timer.Elapsed` の中身を省略すると

[code]

    while (true) {
        if (NativeThinkgear.TG_GetValueStatus(connectionID, NativeThinkgear.DataType.TG_DATA_ATTENTION) != 0) {
            string fileName = "";
            Timer timer = new Timer(1000);
    
            var count = 0;
            int foldercount = 1;
            timer.Elapsed += (sender, e) => {};
        }
    }
    
[/code]

という構造になっているように見えます。もちろんこのループ自身には１秒待つという要素は存在せず、無限に回り続けます（毎秒`timer.Elapsed`が実行されますがそれはwhileループとは無関係です）。

ループが回るたびにタイマーオブジェクトが生成され、それぞれのタイマーが並列に１秒カウントを始めます。


CC BY-SA 4.0
2021-11-26T09:55:04.280
83819
2021-11-26T09:55:04.280
4236
83814
answer