Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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# - Fatal编程技术网

C# 如何在计时器触发下一个事件之前检查剩余的时间?

C# 如何在计时器触发下一个事件之前检查剩余的时间?,c#,C#,例如,我已将timer1.Interval设置为5000,我想知道在计时器滴答作响之前还有多少时间间隔。我怎么能做到 但我不能: 那是因为小于号在等号之前,而不是相反 它的您正在使用的间隔是一个不会被更改的属性(它总是5000,因此检查它是否小于5000是没有意义的)。此外,如果此代码位于Timer1\u Tick功能中,则该代码将无效。但是,我认为您需要的代码是: if (timer1.Interval <= 5000) { //do something } if(timer1.I

例如,我已将
timer1.Interval
设置为
5000
,我想知道在计时器滴答作响之前还有多少时间间隔。我怎么能做到

但我不能:

那是因为小于号在等号之前,而不是相反


它的
您正在使用的间隔是一个不会被更改的属性(它总是5000,因此检查它是否小于5000是没有意义的)。此外,如果此代码位于
Timer1\u Tick
功能中,则该代码将无效。但是,我认为您需要的代码是:

if (timer1.Interval <= 5000)
{
  //do something
}
if(timer1.Interval
如何检查计时器时间


您不能。计时器类无法检查计时器触发前的剩余时间。您最好跟踪计时器上次触发的时间,并计算下一次触发前的剩余时间。

您可以使用间隔为1000(毫秒)的备用计时器.我不认为1毫秒的间隔是一个真正的选择,因为这会给系统带来太大的压力,而且无论如何都是不可靠的

每次该计时器过期时,您都可以检查滴答数(是否总是1000个?)并将其从5000中减去(或使用模)

主定时器启动或滴答声:

   timer_Main.Enabled = true;
        MainTimer_last_Tick = DateTime.Now;


 private void timer_Calc_Remaining_Tick(object sender, EventArgs e)
        {
            int remaining_Milliseconds = (int)(MainTimer_last_Tick.AddMilliseconds(timer_Main.Interval).Subtract(DateTime.Now).TotalMilliseconds);
.../*
        int newValue = (timer_Main.Interval -remaining_Milliseconds) ;


        progressBar1.Maximum = timer_Main.Interval+1;

        progressBar1.Value = newValue ;*/



    }

Interval
值是一个双精度值。因此,您将双精度值与intIt进行比较时,应该是
@Pieter888:no,
Interval
是整数,表示毫秒…@Marco此页面告诉我它是双精度值…@Marco@-Pieter.net中有三个不同的计时器类。
System.Windows.Forms.timer
有一个integer间隔(毫秒),
System.Timers
具有双间隔(毫秒),
System.Threading.Timer
根本没有
interval
属性。谢谢。我可以:timer1.Start();和下一次按日期计时功能。我说得对吗?没错。每次计时器滴答作响或启动时,你都必须记下时间。然后,当你想知道下一次滴答作响还有多长时间到期时,请再次阅读时间并计算过了多少时间。但计时器类不会告诉你这一点。好的,谢谢)你的建议很有用。对不起,我不能加,没问题。接受旧问题的答案会给你更多的代表性,FWIW。我知道只有间隔的属性。但我不知道我到底需要检查什么。在这段代码中是不同的错误。见大卫·赫弗南的回答。
        DateTime MainTimer_last_Tick = DateTime.Now;
        System.Windows.Forms.Timer timer_Calc_Remaining;
        timer_Calc_Remaining.Enabled = true;
        timer_Calc_Remaining.Interval = 100;
        timer_Calc_Remaining.Tick += new System.EventHandler(this.timer_Calc_Remaining_Tick);
   timer_Main.Enabled = true;
        MainTimer_last_Tick = DateTime.Now;


 private void timer_Calc_Remaining_Tick(object sender, EventArgs e)
        {
            int remaining_Milliseconds = (int)(MainTimer_last_Tick.AddMilliseconds(timer_Main.Interval).Subtract(DateTime.Now).TotalMilliseconds);
.../*
        int newValue = (timer_Main.Interval -remaining_Milliseconds) ;


        progressBar1.Maximum = timer_Main.Interval+1;

        progressBar1.Value = newValue ;*/



    }