2013-03-19 50 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