我正在使用this blog post中的AsyncDelegateCommand
類,但我無法知道如何處理髮生在我的action
委託中的異常。我創建了下面的命令:WPF - 使用異步命令使用BackgroundWorker進行錯誤處理
new AsyncDelegateCommand(
readFile, // action to perform
() => shouldReadFile, // can the action be executed?
obj => readFileFinished(true), // run after action successfully completed
ex => readFileFinished(false) // run after action failed
)
我期待在我readFile
方法拋出的異常被抓住併爲RunWorkerCompletedEventArgs的Error
屬性進行設置,對我來說,我BackgroundWorker.RunWorkerCompleted
處理程序訪問。但是,當我運行我的應用程序時,我停止了readFile
拋出的其中一個例外,所以我從來沒有將它交給RunWorkerCompleted
的處理程序。這裏是我的AsyncDelegateCommand
構造:
public AsyncDelegateCommand(Action action, Func<bool> canExecute,
Action<object> completed, Action<Exception> error)
{
if (null == action)
{
throw new ArgumentNullException("action");
}
_worker.DoWork += (sender, e) =>
{
CommandManager.InvalidateRequerySuggested();
// This can possibly throw an exception:
action();
};
_worker.RunWorkerCompleted += (sender, e) =>
{
if (null != completed && null == e.Error)
{
completed(e.Result);
}
// I never make it here:
if (null != error && null != e.Error)
{
error(e.Error);
}
CommandManager.InvalidateRequerySuggested();
};
_canExecute = canExecute;
}
我想爲任何異常action
罰球被捕獲並塞進Error
在RunWorkerCompleted
處理。我如何實現這一目標?