在我的项目中,当我第一次使用“开始按钮”和“停止按钮”启动和结束计时器时,它将正常工作。
但是当我在没有关闭程序的情况下再次按下“开始按钮”时,它开始每间隔插入两次数据,就像两个计时器都在工作一样。
我第三次和第四次重复,它显示了同样多的插入错误。
下面是我的摘要代码,我认为这不是一个完整的停顿。我认为这是一个停顿和重叠。
我做错了吗?
public partial class Window1 : Window
{ DispatcherTimer timer = new DispatcherTimer();
private void btnStart_Click(object sender, RoutedEventArgs e)
{
timer.Interval = TimeSpan.FromMilliseconds(1000);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
private void timer_Tick(object sender, EventArgs e)
{
//data insert
}
private void btnStop_Click(object sender, RoutedEventArgs e)
{
timer.Stop();
}
}
答案 0 :(得分:1)
每次单击按钮时,您将添加一个新的Tick处理程序。您可能还想在重新启动计时器之前检查计时器是否已经在运行。否则,您将重置间隔。
将btnStart_Click的前两行移动到Window1构造函数中:
private readonly DispatcherTimer timer = new DispatcherTimer();
public Window1()
{
timer.Interval = TimeSpan.FromMilliseconds(1000);
timer.Tick += new EventHandler(timer_Tick);
}
private void btnStart_Click(object sender, RoutedEventArgs e)
{
if (!timer.IsEnabled)
{
timer.Start();
}
}
private void btnStop_Click(object sender, RoutedEventArgs e)
{
timer.Stop();
}
private void timer_Tick(object sender, EventArgs e)
{
//data insert
}
作为进一步的改进,您可以执行以下操作:
答案 1 :(得分:-2)
在关闭窗口事件上,只需停止计时器即可。
MyWindow()
{
// Set up ViewModel, assign to DataContext etc.
Closing += viewModel.OnWindowClosing;
}
public void OnWindowClosing(object sender, CancelEventArgs e)
{
timer.Stop();
}