从另一个事件中取消订阅事件

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