0

5 秒ごとにコードを実行するタイマーを作成しようとしていました。しかし、この 5 秒は、現在のコードの実行が終了した後にしかカウントできませんでした。

例:

static void Main(string[] args)
{
    System.Timers.Timer timer = new System.Timers.Timer(5000);

    timer.Elapsed += (obj, ev) =>
    {
        System.IO.File.AppendAllLines(@"D:\test.txt", new string[] { DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss") }, Encoding.UTF8);
        System.Threading.Thread.Sleep(3000);

        System.IO.File.AppendAllLines(@"D:\test.txt", new string[] { DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss") + " - New" }, Encoding.UTF8);
    };

    timer.Start();

    Console.ReadLine();
}

結果:

22/03/2014 06:39:36
22/03/2014 06:39:39 - New
22/03/2014 06:39:41
22/03/2014 06:39:44 - New
22/03/2014 06:39:46
22/03/2014 06:39:49 - New
22/03/2014 06:39:51
22/03/2014 06:39:54 - New
22/03/2014 06:39:56
22/03/2014 06:39:59 - New
22/03/2014 06:40:01
22/03/2014 06:40:04 - New
22/03/2014 06:40:06

期待される結果:

22/03/2014 06:39:36
22/03/2014 06:39:39 - New
22/03/2014 06:39:44
22/03/2014 06:39:47 - New
22/03/2014 06:39:52
22/03/2014 06:39:55 - New
22/03/2014 06:40:00
22/03/2014 06:40:03 - New
22/03/2014 06:40:08
22/03/2014 06:40:11 - New
22/03/2014 06:40:16
22/03/2014 06:40:19 - New
22/03/2014 06:40:24

現在のイベントが終了した後にのみ経過時間をカウントする方法はありますか?

1 つの重要な点: これに使用できる唯一のクラスは System.Timer.Timer であり、Thread.Sleep や再帰的なメソッドは使用できません。

ありがとう、そして私はあなたの答えに感謝します=)

4

1 に答える 1

1

AutoReset プロパティが役立つ場合があります。

static void Main(string[] args)
{
    System.Timers.Timer timer = new System.Timers.Timer(5000);

    timer.Elapsed += (obj, ev) =>
    {
        System.IO.File.AppendAllLines(@"D:\test.txt", new string[] { DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss") }, Encoding.UTF8);
        System.Threading.Thread.Sleep(3000);

        System.IO.File.AppendAllLines(@"D:\test.txt", new string[] { DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss") + " - New" }, Encoding.UTF8);

        //if you want to be sure it will execute, wrap the code above with try... catch
        timer.Start();
    };
    timer.AutoReset = false;
    timer.Start();

    Console.ReadLine();
}
于 2014-03-22T22:01:55.577 に答える