我們得到了一個長時間運行的作業,它需要一個作業詳細信息列表,並且不共享試圖在WPF MVVM .Net 4項目中運行的狀態。看起來任務並行庫是最好的選擇,因爲它在後臺線程上運行並允許並行處理。我創建了一個原型應用程序,它也使用MVVM-Light作爲RelayCommands。示例「aTplTest.7z」位於https://skydrive.live.com/redir?resid=DA3E430C1A5F3B81!186&authkey=!AOOWYGbB_PToC5ATPL WPF MVVM如何讓它工作?
該原型主要工作(只運行斐波那契計算器進行測試),除了以下內容。
- 如何將視圖顯示爲對話框並讓它自動啓動長時間運行的過程? (目前的工作是讓用戶按一個開始按鈕。)
- 如何讓用戶關閉視圖,並且在取消當前作業實例時不讓任務創建異常?
(例如,如果用戶按下視圖關閉窗口按鈕,捕捉的Invoke方法創建另一個例外。)
private bool CreateVouchers(int[] workList)
{
var loopOptions = new ParallelOptions();
loopOptions.CancellationToken = TokenSource.Token;
var success = false;
try
{
Parallel.ForEach(workList, loopOptions, t => BuildVoucher(t));
success = true;
}
catch (OperationCanceledException)
{
var scm = new Action(ShowCancellationMessage);
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, scm);
}
return success;
}
我會更新這個帖子,並與任何解決方案的源例子。
當然。謝謝。隨着密切的問題,我最終執行檢查,如果ViewModel忙,然後e。在關閉時取消= true,告訴用戶先取消該過程。 – Cheval