我被困在这里。我有一个复选框。选中后,启动计时器。未选中时停止计时器。我可以在这里使用一些帮助。我尝试过检查,取消选中和点击事件。什么都没有停止计时器。它只是继续运行...
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!");
}
答案 0 :(得分:1)
删除声明
def t_AND(self, t):
r'&&'
t.value = Conjunction
return t
def t_OR(self, t):
r'\|\|'
t.value = Disjunction
return t
# ...
def p_construct(self, p):
'''
disjunction: predicate OR predicate
| conjunction OR predicate
conjunction: predicate AND predicate
'''
p[0] = p[2](p[1], p[3])
来自点击的处理程序。将它移动到构造函数或某个函数在对象的生命周期中运行一次。 使用Timer的Start()&amp; Stop()方法启动和停止计时器。
答案 1 :(得分: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;
}
}