最简单的可能无限重复

时间:2016-10-26 06:01:00

标签: c# timer

我需要最简单的Timer来每5秒钟无限重复我的代码。没有外部类或什么..

只需:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Now the following code will be repeated over and over");

        //////////////// FOLLOWING CODE /////////////////
        /* the repeated code */
        //////////////// END OF FOLLOWING CODE /////////////////

    }
}

我该怎么做?

5 个答案:

答案 0 :(得分:1)

while(true)Thread.Sleep

一起使用
    using System.Threading;

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Now the following code will be repeated over and over");

            while(true)
            {
                //////////////// FOLLOWING CODE /////////////////
                /* the repeated code */
                //////////////// END OF FOLLOWING CODE /////////////////
              Thread.Sleep(5000);
            }   
        }
    }

答案 1 :(得分:1)

使用Timer

static void Main(string[] args)
{

    Timer timer = new System.Threading.Timer((e) =>
    {
        Console.WriteLine("Now the following code will be repeated over and over");
    }, null, 0, (int)TimeSpan.FromSeconds(5).TotalMilliseconds);

    Console.Read();
}

这里我多次调用Console.WriteLine,您可以编写代码块而不是它。

你可以使用Thread.Sleep(5000);但是根据OP也可以使用它的外部类。

但我建议使用Async和Await提供更好的解决方案。还有一件事你应该有一个终止条件,这样你就不会产生一个无限的调用来避免不必要的内存消耗。

public static async Task RepeatActionEveryInterval(Action action, TimeSpan interval, CancellationToken cancelToken)
{
    while (true)
    {
        action();
        Task task = Task.Delay(interval, cancelToken);

        try
        {
            await task;
        }

        catch (TaskCanceledException)
        {
            return;
        }
    }
}


static void Main(string[] args)
{

    CancellationTokenSource cancelToken = new CancellationTokenSource(TimeSpan.FromSeconds(50));
    Console.WriteLine("Start");
    RepeatActionEveryInterval(() => Console.WriteLine("Repeating Code"), TimeSpan.FromSeconds(5), cancelToken.Token).Wait();
    Console.WriteLine("End");
    Console.Read();
}

在此示例中,此代码将写入50秒。

答案 2 :(得分:1)

使用此代码每5秒递归调用一次函数。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace recurssiveWithThread
{
    class Program
    {

        static void Main(string[] args)
        {

            RecWork();     
        }
        public static int i = 0;
        public static void RecWork()
        {
            // Do the things whatever you needed here 

            i++;
            Console.WriteLine(i);
            //Thread to make the process to sleep for sometimes
            Thread.Sleep(5000);

            //Call your function here
            RecWork();
        }           
    }
}

答案 3 :(得分:1)

最简单的形式:

using System.Threading;

static void Main(string[] args)
{
    bool breakConditionFlag = false;
    ManualResetEvent waitHandler = new ManualResetEvent(false); 

    while(breakConditionFlag)
    {

    //Your Code

    waitHandler.WaitOne(TimeSpan.FromMilliseconds(1000)); // 1000 is the Arbitary value you can change it to Suit your purpose;

    }
}

为什么选择ManualResetEvent?

该事件可以更有效地使用处理器 - 您不必将父线程唤醒以进行轮询。当事件发生时,内核会将你叫醒。

答案 4 :(得分:0)

使用BackgroundWorker类:​​

参考链接: Background worker

如果您使用的是框架> = 4.5.2 QueueBackgroundWorkItem

QueueBackgroundWorkItem