如何在 C# WPF 中停止 DispatcherTimer
How to stop DispatcherTimer in c# WPF
我正在检查时间以及何时等于我想要停止调度程序的东西。
但是没用。调用 Stop()
.
后计时器仍在工作
private void startTime(bool what)
{
vartimer = new DispatcherTimer();
if (!what)
{
MessageBox.Show("Start");
timer.Interval = new TimeSpan(0, 0, 1);
timer.Tick += setTime;
timer.Start();
}
if (what)
{
MessageBox.Show("Stop");
timer.Stop();
}
}
启动时,它显示开始文本。当它应该停止时,它应该显示停止文本,但它仍在工作。
我是不是做错了什么?
timer.stop();
应该停止了Dispatcher
,对吧?
您的 DispatcherTimer
实例应该是 class 的私有字段,因为每次调用 startTime(...)
时,您都在创建 DispatcherTimer
class 即已启动但从未停止。以下是可以执行的操作的示例:
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
实例正确取消订阅并停止。
定义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
的新实例。
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;
我正在检查时间以及何时等于我想要停止调度程序的东西。
但是没用。调用 Stop()
.
private void startTime(bool what)
{
vartimer = new DispatcherTimer();
if (!what)
{
MessageBox.Show("Start");
timer.Interval = new TimeSpan(0, 0, 1);
timer.Tick += setTime;
timer.Start();
}
if (what)
{
MessageBox.Show("Stop");
timer.Stop();
}
}
启动时,它显示开始文本。当它应该停止时,它应该显示停止文本,但它仍在工作。
我是不是做错了什么?
timer.stop();
应该停止了Dispatcher
,对吧?
您的 DispatcherTimer
实例应该是 class 的私有字段,因为每次调用 startTime(...)
时,您都在创建 DispatcherTimer
class 即已启动但从未停止。以下是可以执行的操作的示例:
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
实例正确取消订阅并停止。
定义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
的新实例。
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;