代码之家  ›  专栏  ›  技术社区  ›  Sarah Vessels

WPF-使用BackgroundWorker使用异步命令处理错误

  •  1
  • Sarah Vessels  · 技术社区  · 14 年前

    我用的是 AsyncDelegateCommand 上课时间 this blog post 但是我很难知道该怎么处理 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 被抓住的方法 Error 财产 RunWorkerCompletedEventArgs BackgroundWorker.RunWorkerCompleted 处理程序。但是,当我运行我的应用程序时,我会遇到一个异常 扔东西,所以我从来没有把它交给我的教练 RunWorkerCompleted . 这是我的 施工单位:

    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;
    }
    

    我想要的是任何例外 行动 被抓住并塞进 错误 用于处理 RunWorker已完成 . 我怎样才能做到这一点?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Sarah Vessels    14 年前

    Arrgh,没关系,这是Visual Studio为我做的事情:

    -- BackgroundWorker.DoWork Event

    我在VS中用调试器运行我的应用程序。