我正在检查时间和何时等于要停止调度程序的时间。
但是它不起作用。调用Stop()
后,计时器仍在工作。
private void startTime(bool what)
{
DispatcherTimer timer = new DispatcherTimer();
if(what == false)
{
MessageBox.Show("Start");
timer.Interval = new TimeSpan(0, 0, 1);
timer.Tick += setTime;
timer.Start();
}
if(what == true)
{
MessageBox.Show("Stop");
timer.Stop();
}
}
启动时,它会显示开始文本。当它应该停止时,它应该显示“停止”文本,但它仍在工作。
我做错了吗?
timer.stop();
应该停止Dispatcher
,对吗?
答案 0 :(得分:4)
在您的方法之外定义DispacherTimer
:
DispatcherTimer timer = new DispatcherTimer();
private void startTime(bool what)
{
if (what == false)
{
MessageBox.Show("Start");
timer.Interval = new TimeSpan(0, 0, 1);
timer.Tick -= setTime;
timer.Tick += setTime;
timer.Start();
}
if (what == true)
{
MessageBox.Show("Stop");
timer.Stop();
}
}
在当前代码中,每次调用该方法时,您都在创建DispacherTimer
的新实例。
答案 1 :(得分:2)
您的DispatcherTimer
实例应该是您班级的私有字段,因为每次调用startTime(...)
时,您都在创建DispatcherTimer
类的新实例,该实例已启动但从未停止过。这是一个可以做的例子:
public class YourClass : IDisposable
{
private readonly DispatcherTimer m_timer;
public YourClass()
{
m_timer = new DispatcherTimer();
m_timer.Interval = new TimeSpan(0, 0, 1);
m_timer.Tick += setTime;
}
public void Dispose()
{
m_timer.Tick -= setTime;
m_timer.Stop();
}
private void startTime(bool what)
{
if(what == false)
{
MessageBox.Show("Start");
m_timer.Start();
}
if(what == true)
{
MessageBox.Show("Stop");
m_timer.Stop();
}
}
}
我还添加了IDisposable
实现,以确保Dispatcher
实例已正确取消订阅并已停止。
答案 2 :(得分:0)
Class A
{
private DispatcherTimer _timer; // This is a global variable
public void StartTime(bool what)
{
DispatcherTimer timer = new Dispatcher(); //This is a local variable
...
}
}
当您调用StartTime函数时,计时器是一个新实例。如果运行StartTime(false)和StartTime(true),它将有两个DispatcherTimer;