2016-05-13 210 views
-1

我想要设置一个录制时间标签,以便当用户点击一个按钮,它会启动,当他们点击另一个按钮时,它会停止。计算时间差c天#

我已经尝试了两种不同的东西,但没有奏效。

  1. 设置代码并将值增加1并显示它。

这没有工作,因为我也做其他的事情,这意味着它可能需要1.5秒股票,但我递增1,因此,录放时间越长的推移inaccruate它是多。

  • 获取的TimeOfDay当流开始并且在自动收报机的方法获得的TimeOfDay并减去它们。
  • 这如果记录放置过夜的时间变为弊即-67647.74秒,不是因为工作。

    private void StreamClick_Click(object obj) 
    { 
        _streamStartTime = DateTime.Now.TimeOfDay; 
    } 
    
    private void LiveVideoStream_Tick(VideoCaptureDevice cam) 
    { 
        _currentRecordTime = DateTime.Now.TimeOfDay - _streamStartTime; 
        RecordTime = _currentRecordTime.ToString(); 
    } 
    

    没有人有任何其他想法如何,我可以显示一个很好的计时器。

    +0

    不要只依赖于时间,而是相互减去整个日期时间。 – CodeCaster

    +0

    '_streamStartTime'也应该是'DateTime',然后在点击时将它赋值为'DateTime.Now'。减去两个值,你得到'TimeSpan',使用'TimeSpan' – Ian

    回答

    1

    你的_streamStartTime也应该是DateTime。然后在你Click事件处理程序,分配DateTime.Now它,不仅TimeOfDay使用:

    private void StreamClick_Click(object obj) 
    { 
        _streamStartTime = DateTime.Now; 
    } 
    

    然后在你的计算,你只需要简单地否定两个DateTime得到TimeSpan。使用TimeSpan出示你的时间string

    private void LiveVideoStream_Tick(VideoCaptureDevice cam) 
    { 
        TimeSpan _currentRecordTime = DateTime.Now - _streamStartTime; 
        string RecordTime = _currentRecordTime.TotalDays.ToString() + " " + _currentRecordTime.Hours.ToString() + ":" + 
         _currentRecordTime.Minutes.ToString() + ":" + _currentRecordTime.Seconds.ToString(); 
    
    } 
    
    +0

    在点击我不能指定'DateTime.Now',因为这不是'TimeSpan'? –

    +0

    重要的一点是你的'_streamStartTime'应该是'DateTime'。然后当你减去两个'DateTime'时,你会得到'TimeSpan'。 'TimeSpan'是处理时间差异的一个很好的'struct'。它有很多有用的财产/领域,如天,小时,分钟,秒,毫秒,以及TotalDays,TotalHours,TotalMinutes,TotalSeconds等...试试看! – Ian

    +0

    是的,现在似乎工作。 TimeSpan确实提供了很多属性。一个问题,而不是我使用'.TotalDays''我可以使用'.Days''作为''.TotalDays''给我一个巨大的数字,我只想显示数字像'0,1,2, 3,4,5'。 –

    1

    不要使用DateTime.Now,因为系统时钟可以向前或向后跳在罕见的情况。 DateTime.UtcNow更安全 - 没有夏令时 - 但仍然没有防弹功能。

    您应该使用StopWatch代替。

    +0

    我有点晚,但我必须同意这是“最安全”的解决方案。 –