【发布时间】:2011-04-28 05:46:44
【问题描述】:
我正在使用来自this blog post 的AsyncDelegateCommand 类,但我不知道如何处理我的action 委托中发生的异常。我创建以下命令:
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 中处理。我如何做到这一点?
【问题讨论】:
标签: c# wpf exception asynchronous backgroundworker