从另一个事件中取消订阅事件
Unsubscribing event from inside another event
我正在尝试取消订阅另一个事件中的一个事件,但我不知道应该如何处理这个问题,也不知道是否有一个简单的模式可以解决这个问题。我已经查看了 Microsoft 的官方文档,但没有找到任何可以解决我问题的方法。
private void bTrainingD_Click(object sender, RoutedEventArgs e)
{
System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += new EventHandler(dispatcherTimer_Tick);
timer.Start();
}
...
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
if (true)
{
//some code here
}
else
{
// unsubscribe or stop the Tick-Event here
}
}
感谢您的帮助。 :-)
您需要在 class 字段中保留对 timer
的引用,而不是在局部变量中,以使其可以在另一个 class 方法中访问:
private System.Windows.Threading.DispatcherTimer timer;
private void bTrainingD_Click(object sender, RoutedEventArgs e)
{
timer = new System.Windows.Threading.DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += dispatcherTimer_Tick;
timer.Start();
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
if (true)
{
//some code here
}
else
{
timer.Tick -= dispatcherTimer_Tick;
}
}
我正在尝试取消订阅另一个事件中的一个事件,但我不知道应该如何处理这个问题,也不知道是否有一个简单的模式可以解决这个问题。我已经查看了 Microsoft 的官方文档,但没有找到任何可以解决我问题的方法。
private void bTrainingD_Click(object sender, RoutedEventArgs e)
{
System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += new EventHandler(dispatcherTimer_Tick);
timer.Start();
}
...
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
if (true)
{
//some code here
}
else
{
// unsubscribe or stop the Tick-Event here
}
}
感谢您的帮助。 :-)
您需要在 class 字段中保留对 timer
的引用,而不是在局部变量中,以使其可以在另一个 class 方法中访问:
private System.Windows.Threading.DispatcherTimer timer;
private void bTrainingD_Click(object sender, RoutedEventArgs e)
{
timer = new System.Windows.Threading.DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += dispatcherTimer_Tick;
timer.Start();
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
if (true)
{
//some code here
}
else
{
timer.Tick -= dispatcherTimer_Tick;
}
}