public void CompareAll(object ownerViewModel)
{
if (_projectService.Project.Varieties.Count == 0 || _projectService.Project.Meanings.Count == 0)
return;
Messenger.Default.Send(new PerformingComparisonMessage());
var generator = new VarietyPairGenerator();
generator.Process(_projectService.Project);
var pipeline = new MultiThreadedPipeline<VarietyPair>(GetCompareProcessors());
var progressVM = new ProgressViewModel(vm =>
{
vm.Text = "Comparing all variety pairs...";
pipeline.Process(_projectService.Project.VarietyPairs);
while (!pipeline.WaitForComplete(500))
{
if (vm.Canceled)
{
pipeline.Cancel();
pipeline.WaitForComplete();
break;
}
}
if (vm.Canceled)
{
_projectService.Project.VarietyPairs.Clear();
}
else
{
vm.Text = "Analyzing results...";
Messenger.Default.Send(new ComparisonPerformedMessage());
}
}, false, true);
pipeline.ProgressUpdated += (sender, e) => progressVM.Value = e.PercentCompleted;
_dialogService.ShowModalDialog(ownerViewModel, progressVM);
}