首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ICommand.CanExecute异步

ICommand.CanExecute异步
EN

Stack Overflow用户
提问于 2011-11-16 17:40:08
回答 4查看 3.2K关注 0票数 2

我有一个命令,检查CanExecute需要很长时间。现在,我问自己,是否可以异步运行CanExecute的方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-16 17:49:18

嗯,这是可能的。您应该使用CanExecutedChanged。在后台执行持续时间较长的检查(您可以使用BackgroundWorker),如果可以执行或不能执行,则存储结果,触发事件并在CanExecute中返回缓存值。

票数 6
EN

Stack Overflow用户

发布于 2011-11-16 17:55:58

不,你不能直接异步运行它。你也不应该,你不知道绑定子系统什么时候会调用它。

没有什么能阻止你从该函数中启动后台线程,但老实说,这是没有什么意义的。如果您的CanExecute代码需要这么长的时间来执行,那么您确实需要重新评估您正在做的事情,无论这意味着重做代码,还是重做UI以消除对CanExecute的依赖。

如果您使用Prism中的DelegateCommand,则可以强制绑定到该命令的任何内容在您选择时重新评估CanExecute。这可以通过在命令上调用RaiseCanExecuteChanged()函数来完成。如果你有一个后台线程运行,在必要的时候调用它,它应该以你想要的方式工作。

票数 5
EN

Stack Overflow用户

发布于 2011-11-16 17:53:42

CanExecute必须在GUI线程上运行。

但您可以自己简单地实现以下内容:

使用从Thread更新的Boolean属性。当它被设置时,还要调用NotifyPropertyChanged (用于命令)。

最好将此属性默认为false,但这取决于您的域逻辑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8149484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档