DateTime和Stopwatch值比较

时间:2014-10-09 15:29:50

标签: c# datetime if-statement windows-phone-8 stopwatch

如果经过的时间等于存储在DateTime对象Stopwatch.reset();中的时间值,我尝试触发workDt,使用.equals()比较经过的时间带有时间的秒表存储在我的DateTime对象workDt.

基本上onTapped事件会触发我的秒表启动并使用当前已用时间更新文本块。

然后,我将用户输入的时间值"00 : 00 : 07 : 000"传递给我想要用于比较的DateTime对象。问题是我从未遇到触发myStopwatch.reset();

的条件

在测试中我将字符串设置如下,然后我在workDt上设置一个断点,它显示正确的时间被存储,但它没有触发条件。

private async void startBtn_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {

            //delay stop watch start to allow time to get ready.
            TimeSpan time = TimeSpan.FromSeconds(1);
            await System.Threading.Tasks.Task.Delay(time);


            string wrkString;
            string rstString; 
            int i;

            //set text box editing to false to prevent illegal input.
            wrkTbx.IsEnabled = false;
            restTbx.IsEnabled = false;
            roundSlider.IsEnabled = false;
            roundsTbx.IsEnabled = false;


            //Assign text box time string to string variables.
            wrkString = wrkTbx.Text;
            rstString = restTbx.Text;


            //Assign text box string value to a date time variable.

            DateTime workDt = DateTime.ParseExact(wrkString.Replace(": ", ":").Replace(" :", ":"), "HH:mm:ss:fff", CultureInfo.InvariantCulture);
            DateTime restDt = DateTime.ParseExact(rstString.Replace(": ", ":").Replace(" :", ":"), "HH:mm:ss:fff", CultureInfo.InvariantCulture);

            //Run the timer for until i reaches the number of rounds value.Eg, 4 rounds
            //for (i = 0; i <= roundSlider.Value; i++ )
            //{

                StopGoCvs.Background = new SolidColorBrush(Colors.Green);
                //startSoundElmt.Play();
                // set up the timer
                myTimer = new DispatcherTimer();
                myTimer.Interval = new TimeSpan(0, 0, 0, 0, 1);
                myTimer.Tick += myTimer_Tick;


                // start both timers
                myTimer.Start();
                myStopwatch.Start();

                //reset timer if date time value is equal to current elapsed time.
                if(myStopwatch.Elapsed.Equals(workDt.TimeOfDay))
                {

                    myStopwatch.Reset();

                }






        }

这是实现此目的的正确方法还是我应该使用不同的方法?

2 个答案:

答案 0 :(得分:2)

经过时间完全与所需时间相同的可能性 - 下降到刻度 - 很小。

相反,你应该看看至少是否已经过了正确的时间:

if (myStopwatch.Elapsed >= workDt.TimeOfDay)

但是,您检查的地方不合适 - 您在启动计时器后正在检查 。你不应该在计时器嘀嗒事件中查看吗?

答案 1 :(得分:1)

如果时间等于刻度精度(忽略关于刻度刷新率的参数等),则时间跨度将相等。

如果你想坚持这种方法,你会想知道秒表何时在一天中的时间过渡(或在TimeOfDay周围的时间窗口内)。

但是通过开始一些工作并使用计时器在正确的时间触发事件来修改正在完成的工作,可能有更优雅的方法来实现这一目标。 (但是必须发布更多代码来说明这应该是什么样子)。