2013-03-19 93 views
1

我試圖在結束之前刪除計時器。如果我點擊按鈕1,計時器開始,但是如果我在計時器過去之前點擊按鈕2,我仍然會收到來自滴答事件的消息。刪除動態計時器

我需要有多個計時器,將日期作爲字典中的鍵。

有人可以告訴我我在做什麼錯在這裏請。

private Dictionary<string, System.Timers.Timer> timers = new Dictionary<string, System.Timers.Timer>(); 

private void button1_Click(object sender, EventArgs e) 
{ 
    string dateTimeString = "19/03/2013 05:11:23" 
    var myTimer = new System.Timers.Timer(); 
    myTimer.Interval = 30000; 
    myTimer.Elapsed += new ElapsedEventHandler(MyTimer_Tick); 
    myTimer.Enabled = true; 
    timers.Add(dateTimeString, myTimer); 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    timers.Remove("19/03/2013 05:11:23"); 
} 

public void MyTimer_Tick(object sender, EventArgs e) 
{ 
    MessageBox.Show("Timer tick"); 
    ((System.Timers.Timer)sender).Dispose(); 
} 

回答

4

試試這個:

private void button2_Click(object sender, EventArgs e) 
    { 
     timers[launchTime].Enabled = false; 
     timers.Remove(launchTime); 
    } 
+0

Thankyou快速準確地回覆。我一直在努力工作2個或更多小時。 – 2013-03-19 05:33:01

0

您應該將您的計時器設置爲空。

+0

將計時器設置爲null不一定會刪除它。您必須刪除所有引用才能符合垃圾回收的條件。最好禁用然後處理定時器。然後你知道它不會再打勾,即使垃圾收集器需要一段時間來清理它。 – 2013-03-19 05:32:24