我试图挖出
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中操作的附近/之前,在那里更有意义的是中止昂贵的操作/循环/等.