取消C#和XAML中的按钮功能

我试图挖出
WPF应用程序的取消按钮的功能.目前我关注的功能有两个:

    private void AnalysisClick(object sender, RoutedEventArgs e)
    {
        model.RunAnalysis();
    }
    private void CancelClick(object sender, RoutedEventArgs e)
    {

        model.RunAnalysis().Abort;  //Pseudo-code, needs help!
        MessageBox.Show("The Analysis was cancelled.", "Operation Cancelled", MessageBoxButton.YesNo);
    }

“AnalysisClick”功能以一个名为Begin的按钮启动. “取消点击”按钮的目标是停止分析并提供一个对话框,通知用户测试已停止.实现这一目标的最佳方法是什么?

编辑
我目前正在调查BackgroundWorker和每个用户的Microsoft Asynchronous Programming Model建议.

最佳答案 我同意上述对你的问题的评论,但是如果你想快速尝试一下,任务是一种很好的方法来做异步操作,能够取消这些任务.这样的事情应该起作用或至少让你开始:

private CancellationTokenSource _cancelAnalysisTask = new CancellationTokenSource();
    private Task _analysisTask;

    private void AnalysisClick(object sender, RoutedEventArgs e)
    {
        _analysisTask = Task.Factory.StartNew(() =>
            {
                if (_cancelAnalysisTask.IsCancellationRequested)
                        return;
                model.RunAnalysis();
            });
    }

    private void CancelClick(object sender, RoutedEventArgs e)
    {
        if (_analysisTask != null)
        {
            _cancelAnalysisTask.Cancel();
            _analysisTask = null;
            MessageBox.Show("The Analysis was cancelled.", "Operation Cancelled", MessageBoxButton.OK);
        }
    }

这是一个快速的写作,我建议将异步功能放入ViewModel并公开命令. UI不应该真正了解操作的细节.然后取消任务可以写在ViewModel中操作的附近/之前,在那里更有意义的是中止昂贵的操作/循环/等.

点赞