2013-01-23 37 views
0

我正在使用一個類來修改DateTime並使用TimeSpan每秒用DispatchTimer顯示X小時,Y分鐘,Z秒到WPF標籤。代碼本身提供了適當的時間段,但DispatchTimer給出了錯誤的輸出。我可以就這裏發生的事情得到一些意見嗎?TimeSpan和DispatchTimer

修改時間分鐘屬性仍然在調試休息期間被查詢(懸停在ModifiedTime.Minutes不斷增加的數字。),這是常態嗎?

運行時輸出開始於3分鐘,然後顯示第8分鐘,13,18,23,28等

庫:

public Clock() { 
    load_ = DateTime.Now; 
    time_ = new DateTime(); 
    time_ = DateTime.Now; 
    modifiedTime_ = new DateTime();   
    modifiedTime_ = DateTime.Now; 
    difference = TimeSpan.Zero; 
} 

public TimeSpan ModifiedTime { 
    //Convert the real time to timespan. 
    //display X Years, Y Days, Z Hours... 
    get { 
    modifiedTime_ = modifiedTime_.AddMinutes(1.0); 
    difference = modifiedTime_.Subtract(time_); 
    return difference; 
    } 
    set { difference = value; } 
} 

WPF:

DispatcherTimer dispatcherTimer; 
public MainWindow() { 
    InitializeComponent(); 
    dispatcherTimer = new DispatcherTimer(); 
    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); 
    dispatcherTimer.Interval = new TimeSpan(0, 0, 1); 
    dispatcherTimer.Start(); 
} 
private void dispatcherTimer_Tick(object sender, EventArgs e) { 
    lblModTime.Content = clock.ModifiedTime.Hours + " hours, " + clock.ModifiedTime.Minutes + " minutes, " + clock.ModifiedTime.Seconds + " seconds, " + clock.ModifiedTime.Milliseconds + " milliseconds."; 
} 
+0

你能澄清你到底想要做什麼嗎? – Despertar

+0

基本上,我比較兩個日期。一個是程序加載的時間,第二個會每秒增加一些任意的時間。我試圖展示兩者之間的跨度。 –

回答

1

沒錯,每次調用clock.ModifiedTime。在調度程序中(4次!),您可以在修改的時間內加上一分鐘,再加上一次可以在調試程序中評估語句。這將解釋你每次增加5次顯示。

+0

這就是問題所在,我實際需要做的就是用一次調用時間跨度對象來捕獲WPF中的ModifiedTime。也就是說,在調用x.Minutes之前,在WPF中創建TimeSpan x = clock.ModifiedTime。 –

1

如果我正確理解,您希望在每秒傳遞的時間內增加一分鐘。因此,請在幾秒鐘內取得差異,然後將此時間添加爲新時間開始的分鐘數。

public TimeSpan ModifiedTime 
{ 
    get 
    { 
     TimeSpan elapsed = DateTime.Now - TimeStarted; 
     return TimeStarted.AddMinutes(elapsed.TotalSeconds); 
    } 
}