4

我试图散列 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 的按钮启动。“CancelClick”按钮的目的是停止分析并提供一个对话框,通知用户测试已停止。实现这一目标的最佳方法是什么?

编辑 我目前正在根据用户的建议BackgroundWorker研究Microsoft 异步编程模型。

4

1 回答 1

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 中操作的核心附近/之前,在这种情况下中止昂贵的操作/循环/等更有意义。

于 2012-10-10T17:23:20.863 回答