简体   繁体   English

WPF C#复选框控制计时器

[英]WPF C# Checkbox controlling a timer

I'm stuck here. 我被困在这里。 I have a checkbox. 我有一个复选框。 When checked, start timer. 选中后,启动计时器。 When unchecked stop timer. 未选中时停止计时器。 I can use some help here. 我可以在这里使用一些帮助。 I have tried checked, unchecked, and click events. 我尝试了选中,未选中和单击事件。 Nothing is stopping the timer. 没有什么可以停止计时器。 It just keeps running... 它一直在运行...

Xaml: (has all three events just for show) 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#: (all three attempts) 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};
}

I even tried this, which was mention at Stack Overflow 我什至尝试过这个,这在Stack Overflow中提到过

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

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

Remove the statement 删除语句

var aTimer = new Timer(); 

from withing the clicked handler. 从点击的处理程序。 move it to the constructor or some function run just once during the object's lifetime. 将其移动到构造函数或某个函数在对象的生存期内仅运行一次。 Use Timer's Start() & Stop() methods to start and stop the timer. 使用Timer的Start()和Stop()方法来启动和停止计时器。

don't create a new Timer on every event. 不要在每个事件上都创建一个new Timer Declare 1 timer in Window object (window field/property), initialize it in constructor and work with it in any event handlers. Window对象(窗口字段/属性)中声明1个计时器,在构造函数中对其进行初始化,并在任何事件处理程序中使用它。 At the moment you are running multiple timers 目前您正在运行多个计时器

<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;
   }    
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM