Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用计时器将代码从当前计时器循环到给定时间。计时器(或)如何将计时器添加到循环中?_C#_.net - Fatal编程技术网

C# 如何使用计时器将代码从当前计时器循环到给定时间。计时器(或)如何将计时器添加到循环中?

C# 如何使用计时器将代码从当前计时器循环到给定时间。计时器(或)如何将计时器添加到循环中?,c#,.net,C#,.net,我必须在指定的时间内循环代码。我是用DateTime实现的 var time=DateTime.Now.AddMinutes((Convert.ToDouble(1))); while(DateTime.Compare(DateTime.Now, time) <= 0) { console.write("some message..") } var-time=DateTime.Now.AddMinutes((Convert.ToDouble(1)); while(DateTime.C

我必须在指定的时间内循环代码。我是用DateTime实现的

var time=DateTime.Now.AddMinutes((Convert.ToDouble(1)));
while(DateTime.Compare(DateTime.Now, time) <= 0)
{
  console.write("some message..")
}
var-time=DateTime.Now.AddMinutes((Convert.ToDouble(1));
while(DateTime.Compare(DateTime.Now,time)
将在100ms后每隔100ms调用dosomething()方法
在后台,直到调用timer.Dispose();
此实现将永远不会终止,因为它写在这里;)


如果你想让这项工作成功,你需要制作你的程序

看到和

一旦您的代码在它自己的线程中执行(使用线程、任务、计时器或这些名称空间中的任何其他变体),您可以告诉它停止执行一段时间,这可以通过调用thread.Sleep或Task.Delay方法来完成

e、 g

然而,你不应该指望这个来精确计时,因为你所做的是告诉操作系统这个线程不需要执行那么长的时间,这并不意味着操作系统会在时间用完后立即将它传递给处理器。根据CPU的繁忙程度,在线程到达等待处理队列的顶端之前,可能会有相当长的延迟。如果计时非常重要,那么我会设置一个较低的时间,并在运行您随时可以使用的时钟之前检查时钟,这是准确的,最适合您的场景

Action<long> action = (milliseconds) =>
{
    Console.WriteLine("Running for {0}ms", milliseconds);

    Stopwatch watch = new Stopwatch();
    watch.Start();

    while (watch.Elapsed.TotalMilliseconds <= milliseconds)
    {
        Console.WriteLine("ticks:{0}", DateTime.Now.Ticks);
        Thread.Sleep(100);
    }

    Console.WriteLine("Done");
    watch.Stop();
};

Task.Run(() => action(1000));
Action动作=(毫秒)=>
{
WriteLine(“运行{0}毫秒”,毫秒);
秒表=新秒表();
watch.Start();
while(watch.eassed.totalmillizes动作(1000));

如果问题只存在“每秒写入10次”,请在console.write下添加System.Threading.Thread.Sleep(100);应用程序将等待1/10秒。但它不会循环。例如:如果我超过1分钟,它应该循环函数1分钟(比如每秒打印10条消息)例如,你有没有放一个线程。Sleep(100000);after?或者仅仅放一个for(;)…更新了答案…例如,
System.Timers.Timer
在线程池中的第一个可用线程上执行Tick事件,这样它就可以在多线程环境中工作了,已经没有必要使用
任务来实现这一点。@Fabjan这将是实现多线程的另一种方法,但是我不建议使用时间、背景词或其他许多实现itI的方法我认为OP只是想了解计时器是如何工作的。有时当我们使用较旧版本的.NET framework(如NET2.0cf)时我们根本没有使用
任务
TPL
这样的奢侈。如果想要每毫秒打印30条消息,如何使用。下次5月40日,消息的数量可能会有所不同。我不明白你的问题。你不能确定一毫秒内发生x个事件。我通过传递时间span=1000/30我能够控制的值,得到了解决方案ol消息
Task.Run(()=>
{
    do
    {
        //do something
        await Task.Delay(100);
    }
    while(! exitCondition)
});
Action<long> action = (milliseconds) =>
{
    Console.WriteLine("Running for {0}ms", milliseconds);

    Stopwatch watch = new Stopwatch();
    watch.Start();

    while (watch.Elapsed.TotalMilliseconds <= milliseconds)
    {
        Console.WriteLine("ticks:{0}", DateTime.Now.Ticks);
        Thread.Sleep(100);
    }

    Console.WriteLine("Done");
    watch.Stop();
};

Task.Run(() => action(1000));