2016-05-13 119 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

    我有點晚,但我必須同意這是「最安全」的解決方案。 –