2015-09-22 46 views
1

我有一個窗體窗體應用程序與時間輸入(以分鐘爲單位),在定時器消逝後觸發GUI應用程序。最初我從用戶那裏接受輸入並設置時間。假設用戶輸入45分鐘。 45分鐘後,我的其他GUI應用程序啓動。目前我使用的是:延長計時器的持續時間,同時勾選

Timer MyTimer = new Timer(); 

private void Form1_Load(object sender, EventArgs e) 
{ 
    MyTimer.Interval = 45mins // Input from user 
    MyTimer.Tick += new EventHandler(MyTimer_Tick); 
    MyTimer.Start(); 
} 

private void MyTimer_Tick(object sender, EventArgs e) 
{ 
    //pop my GUI application 
} 

所以現在,我的問題是,我怎麼能延長計時器?假設在第20分鐘倒計時,用戶希望延長計時器的15分鐘,我將輸入作爲15來自用戶,之後,計時器應該將這15分鐘添加到現有時間並在35分鐘後觸發GUI應用。即從35分鐘開始計數。總計時間過去之後,應該是50分鐘。我怎樣才能做到這一點?

+0

那只是一個僞代碼我寫有更大..我的主要目標是擴展它..如何做到這一點? – Pavan

+0

使用1分鐘計時器,增加一個變量,直到達到45爲止。將該變量添加到額外的15分鐘。 – LarsTech

+0

我不能在計時器API中實現這一點?以及如何在窗體中顯示計時器計數?實時定時器 – Pavan

回答

1

其實將計時器設置爲1秒就好了。將不會有性能問題。只是跟蹤日期時間的時候就開始,那麼你可以使用tick事件來顯示經過時間和檢查如果持續時間比用戶想要

private DateTime timerStart; 
private TimeSpan duration; 
private void Form1_Load(object sender, EventArgs e) 
{ 
    Timer MyTimer = new Timer(); 
    MyTimer.Interval = 1000; // tick at one second to update the UI 
    MyTimer.Tick += new EventHandler(MyTimer_Tick); 
    duration = whatever...// Input from user 
    timerStart = DateTime.Now; 
    MyTimer.Start(); 
} 

private void changeTimer(TimeSpan newValue) { 
    duration = newValue; 
} 

private void MyTimer_Tick(object sender, EventArgs e) 
{ 
    TimeSpan alreadyElapsed = DateTime.Now.Subtract(timerStart); 
    // update the UI here using the alreadyElapsed TimeSpan 
    if(alreadyElapsed > duration) 
    { 
    //pop my GUI application 
    } 
} 
+0

太棒了!感謝您的解釋! :)。 有一個疑問:在程序(定時器)運行時,可以設置持續時間(新值)變量嗎? @ x4rf41 – Pavan

+0

如果你不是從另一個線程設置值,是的。 –

+0

@ThorstenDittmar我設置持續時間的方式完全是線程安全的afaik – x4rf41

0

如果將計時器設置爲一秒/分鐘的間隔,並將另一個變量設置爲秒/分鐘的數量,則很容易實現。

減少每個計時器滴答的變量值。如果需要擴大時間間隔,請添加到該變量。如果變量值爲0,則啓動其他應用程序。

+0

謝謝我如何顯示錶單上剩餘的剩餘時間? – Pavan

+0

通過將「Label」的內容設置爲保存剩餘時間的變量的值...? –