我正在使用TPL在MVVM應用程序中的後臺線程上串行執行兩個任務。在任務正在運行時,應用程序將顯示一個「進度」對話框。因此,我的MVVM命令的Execute()
方法首先在主視圖模型中引發ImageProcessingStarting
事件。該視圖通過顯示進度對話框來響應該事件。然後該命令啓動第一個任務,繼續執行第二個任務,並通過在主視圖模型中引發ImageProcessingEnding
事件執行最後的「繼續」。該視圖通過關閉進度對話框來響應該事件。代碼如下。繼續執行幾項任務
兩個後臺任務都正常執行,但進度對話框在第一個任務完成後提前關閉,而不是在第二個任務完成後關閉。我希望有人能告訴我爲什麼,以及如何解決這個問題。謝謝你的幫助。
public void Execute(object parameter)
{
...
// Announce that image processing is starting
m_ViewModel.RaiseImageProcessingStartingEvent();
// Set up a cancellation token source
var tokenSource = new CancellationTokenSource();
m_ViewModel.ProgressDialogViewModel.TokenSource = tokenSource;
// Background Task #1: Add time stamps to files
var task = Task.Factory.StartNew(() => this.AddTimeStampsToFiles(fileList, progressDialogViewModel));
/* The Progress dialog is closing at this point! */
// Background Task #2: Resequence files
task.ContinueWith(t => this.ResequenceFiles(fileList, progressDialogViewModel));
/* The Progress dialog should close at this point. */
// Announce that image processing is finished
task.ContinueWith(t => m_ViewModel.RaiseImageProcessingEndingEvent(), TaskScheduler.FromCurrentSynchronizationContext());
}
那麼,如何讓這些任務連續運行?謝謝。 –
@David Veeneman:我已根據您的意見更新了我的答案。 – fatty