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

时间:2012-10-10 15:25:26

标签: c# wpf cancel-button

我正在尝试散列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);
    }

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

修改 我目前正在根据用户的建议调查BackgroundWorkerMicrosoft Asynchronous Programming Model

1 个答案:

答案 0 :(得分:2)

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

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中的操作之前/之前写入,在那里更有意义中止昂贵的操作/循环/等。