0

15分から0秒までの「シンプルな」タイマーを作ろうとしています。15 分として 900 秒を使用しています。プログラムを実行すると問題なく実行されますが、引き続きネガになります。私はまだC#の初心者です。コードを 0 で停止し、アラートを実行して誰かの注意を引きたいと思っています。ここに私がこれまでに持っているものがあります

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;

namespace GBS_GI_Timer
{
   public class Program
    {
       public static int t = 2;

        public static void Main()
        {
            System.Timers.Timer aTimer = new System.Timers.Timer();

            // Hook up the Elapsed event for the timer.
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

            aTimer.Interval = 1000;
            aTimer.Enabled = true;

            //Console.WriteLine("Press the Enter key to exit the program.");
            Console.ReadLine();


            //GC.KeepAlive(aTimer);
            if (t == 0)
            aTimer.Stop();
        }
        public static void OnTimedEvent(object source, ElapsedEventArgs e)
        {
            //TimeSpan timeRemaining = TimeSpan.FromSeconds(t);

            Console.WriteLine("Time remianing..{0}", t);
            t--;

            if (t == 0)
            {
                Console.WriteLine("\a");
                Console.WriteLine("Time to check their vitals, again!");
                Console.WriteLine("Press any key to exit...");
            }
            // Console.ReadKey();
            Console.ReadLine();
        }
    }
}
4

3 に答える 3

3

Enter キーを押す (または何かを入力して Enter キーを押す) と、t をチェックしてタイマーを停止するようにコード化されています。t == 0 かどうかを確認してから、タイマーを停止しています。Enter キーを押す前に t が 0 未満の場合はどうなりますか?

于 2012-05-15T19:56:53.503 に答える
1

System.Timers.Timer は ThreadPool を使用してコールバック ルーチンを実行します。

class Program
{
    public static int t = 2;
    static System.Timers.Timer aTimer = new System.Timers.Timer();

    public static void Main()
    {

        // Hook up the Elapsed event for the timer.
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

        aTimer.Interval = 1000;
        aTimer.Enabled = true;

        Console.ReadLine();
    }
    public static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        Console.WriteLine("Time remianing..{0}", t);
        t--;

        if (t == 0)
        {
            Console.WriteLine("\a");
            Console.WriteLine("Time to check their vitals, again!");
            Console.WriteLine("Press any key to exit...");
            aTimer.Stop();
            Console.ReadLine();
        }
    }
}
于 2012-05-15T20:07:32.843 に答える
0

現状のプログラムには他にもいくつかの論理的な問題があり、実行中であっても希望どおりに動作するかどうかはわかりません。

OnTimedEvent をリファクタリングして、

Console.WriteLine(string.Format("{0} time to check their vitals!"));

while ループを使用して、メイン ルーチンで t のステータスを確認します。

ハンドラーに入るときに Timer.Interval を変更して、最初のイベントを確認するまで他のイベントが発生しないようにすることもできますが、このルーチンが 15 分間実行されることを保証することはできません...

于 2012-05-15T19:58:31.693 に答える