在关闭WPF应用程序时处理对UI线程应用更改的Timer

时间:2018-05-14 19:06:22

标签: c# wpf timer

考虑一个计时器,它将在WPF应用程序中的Clicked事件上触发,如此,

private async void Button_Click(object sender, RoutedEventArgs e)
{
    Timer t = new Timer(DoingWorkOnUI,null,0,5000);

    //Also doing long execution time job here. in another thread
}

基本上问题是,如果用户关闭应用程序,我的计时器仍然在运行并且永远不会消失导致任务被取消错误。我想把它放在他的回调中,但我无法弄清楚我会怎么做。

这是我的尝试,我可能完全错了,但我可以很好地抓住取消,我只是找不到如何处理计时器的解决方案。

private void DoingWorkOnUI(object state) {
    cts = new CancellationTokenSource();
    var token = cts.Token;
    try
    {
        token.ThrowIfCancellationRequested();
        this.Dispatcher.Invoke((Action)(() =>
        {
            \\Doing work on UI
        }));
    }
    catch (OperationCanceledException)
    {
        //Dispose Timer here ???
    }
    finally {
        //Disposing token
        cts.Dispose();
    }
}

1 个答案:

答案 0 :(得分:0)

您可以处理窗口的<ul class="flex-container wrap-reverse"> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li> </li> <li></li> <div class="bigbrick">Big Brick</div> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> 事件来处理计时器。

由于您要在班级中创建Closing字段,因此您还应该实施dispose pattern以应对最佳做法指南:

IDisposable