[英]WPF - error handling with asynchronous command using BackgroundWorker
我正在使用此博客文章中的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
進行處理的異常。 我該如何實現?
Arrgh,沒關系,這是Visual Studio為我做的事情:
如果該操作引發了代碼無法處理的異常,則BackgroundWorker將捕獲該異常並將其傳遞到RunWorkerCompleted事件處理程序,在該事件處理程序中將其公開為System.ComponentModel.RunWorkerCompletedEventArgs的Error屬性。 如果您在Visual Studio調試器下運行,則調試器將在DoWork事件處理程序中引發未處理異常的點處中斷。
我在VS中使用調試器運行應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.