[英]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.