我正在使用TPL进行多功能手术。 任务需要向调查组报告进展情况,以便更新进展诊断。 由于该表是MVVM,进步方言必须服从于一种名为“进步”的观念模型,该模型以带有签名<编码>的最新进度表
我使用一种方法更新财产,因为它让每一项任务以不同数额增加进步财产。 因此,如果我有两个任务,第一个任务需要四倍的时间,第一个任务叫<代码>UpdateProgress(4)/code>,第二个任务叫UpdateProgress(1)
。 因此,第一个任务完成时进展率为80%,第二个任务完成时进展为100%。
My question is really pretty simple: How do I call the view model method from my background tasks? Code is below. Thanks for your help.
任务使用<代码>Parallel。 每种(,在编码中,照此办理:
private void ResequenceFiles(IEnumerable<string> fileList, ProgressDialogViewModel viewModel)
{
// Wrap token source in a Parallel Options object
var loopOptions = new ParallelOptions();
loopOptions.CancellationToken = viewModel.TokenSource.Token;
// Process images in parallel
try
{
Parallel.ForEach(fileList, loopOptions, sourcePath =>
{
var fileName = Path.GetFileName(sourcePath);
if (fileName == null) throw new ArgumentException("File list contains a bad file path.");
var destPath = Path.Combine(m_ViewModel.DestFolder, fileName);
SetImageTimeAttributes(sourcePath, destPath);
// This statement isn t working
viewModel.IncrementProgressCounter(1);
});
}
catch (OperationCanceledException)
{
viewModel.ProgressMessage = "Image processing cancelled.";
}
}
The statement viewModel.Increment ProgramressCounter(1)
isn thanging an special, but it not take to the main thread. 任务从MVVERSICommand
的物体中删除,其编号为:
public void Execute(object parameter)
{
...
// Background Task #2: Resequence files
var secondTask = firstTask.ContinueWith(t => this.ResequenceFiles(fileList, progressDialogViewModel));
...
}