2017-07-25 46 views
0

我卡在这里。我有一个复选框。选中后,启动计时器。当未检查停止计时器。我可以在这里使用一些帮助。我试过检查,未检查,并单击事件。没有什么是停止计时器。它只是让运行...WPF C#复选框控制一个定时器

的XAML:(有作秀所有三个事件)

<CheckBox x:Name="CbAutoRefresh" Grid.Row="1" ClipToBounds="True" HorizontalAlignment="Left" Content="Enable Auto Refresh" Margin="10,0,0,0" Width="150" Click="CbAutoRefresh_Click" Checked="CbAutoRefresh_Checked" Unchecked="CbAutoRefresh_Unchecked" /> 

C#:(所有三次尝试)

private void CbAutoRefresh_Click(object sender, RoutedEventArgs e) 
{ 

    var aTimer = new Timer(); 
    if (CbAutoRefresh.IsChecked == true) 
    { 
     //start a timer: 

     aTimer.Elapsed += OnTimedEvent; 
     aTimer.Interval = 60000; 
     aTimer.Enabled = true; 
    } 
    else 
    { 
     aTimer.Enabled = false; 
    } 
} 

private void CbAutoRefresh_Checked(object sender, RoutedEventArgs e) 
{ 
    //start a timer: 
    var aTimer = new Timer(); 
    aTimer.Elapsed += OnTimedEvent; 
    aTimer.Interval = 60000; 
    aTimer.Enabled = true; 
} 

private void CbAutoRefresh_Unchecked(object sender, RoutedEventArgs e) 
{ 
    var aTimer = new Timer {Enabled = false}; 
} 

我甚至想这一点,这是何况在Stack Overflow

<CheckBox Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/> 

private void CheckBoxChanged(object sender, RoutedEventArgs e) 
{ 
    MessageBox.Show("Eureka, it changed!"); 
} 
+2

不上每一个事件创建一个新的'Timer'。在窗口对象(窗口字段/属性)中声明1个定时器,在构造函数中初始化它,并在任何事件处理程序中处理它。目前你正在运行*多个*定时器 – ASh

回答

1

不会在每个事件上创建一个new Timer。在Window对象(窗口字段/属性)中声明1个定时器,在构造函数中初始化它并在任何事件处理程序中处理它。此刻的你正在运行多个定时器

<CheckBox x:Name="CbAutoRefresh" Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/> 
public class MyWindow() 
{ 
    private Timer _t; 
    public MyWindow() 
    { 
     InitializeComponent(); 
     _t = new Timer(); 
     _t.Elapsed += OnTimedEvent; 
     _t.Interval = 60000; 
    } 

    private void CheckBoxChanged(object sender, RoutedEventArgs e) 
    { 
     _t.Enabled = CbAutoRefresh.IsChecked; 
    }  
} 
+0

非常小的调整,但正是我所期待的。谢谢||| (CbAutoRefresh.IsChecked!= null)_t.Enabled =(bool)CbAutoRefresh.IsChecked;如果(CbAutoRefresh.IsChecked!= null)_t.Enabled = – RazorSharp

+0

@ dot3tech,我真的忘记了IsChecked是空的。考虑使用'_t.Enabled = CbAutoRefresh.IsChecked ??假'(将'null'也视为'false',代码更短) – ASh

1

取出声明

var aTimer = new Timer(); 

从点击处理程序。将它移动到构造函数或某个函数在对象的生命周期中只运行一次。 使用定时器的开始()& Stop()方法启动和停止定时器。