我有一个命令,检查CanExecute需要很长时间。现在,我问自己,是否可以异步运行CanExecute的方法?
发布于 2011-11-16 17:49:18
嗯,这是可能的。您应该使用CanExecutedChanged。在后台执行持续时间较长的检查(您可以使用BackgroundWorker),如果可以执行或不能执行,则存储结果,触发事件并在CanExecute中返回缓存值。
发布于 2011-11-16 17:55:58
不,你不能直接异步运行它。你也不应该,你不知道绑定子系统什么时候会调用它。
没有什么能阻止你从该函数中启动后台线程,但老实说,这是没有什么意义的。如果您的CanExecute代码需要这么长的时间来执行,那么您确实需要重新评估您正在做的事情,无论这意味着重做代码,还是重做UI以消除对CanExecute的依赖。
如果您使用Prism中的DelegateCommand,则可以强制绑定到该命令的任何内容在您选择时重新评估CanExecute。这可以通过在命令上调用RaiseCanExecuteChanged()函数来完成。如果你有一个后台线程运行,在必要的时候调用它,它应该以你想要的方式工作。
发布于 2011-11-16 17:53:42
CanExecute必须在GUI线程上运行。
但您可以自己简单地实现以下内容:
使用从Thread更新的Boolean属性。当它被设置时,还要调用NotifyPropertyChanged (用于命令)。
最好将此属性默认为false,但这取决于您的域逻辑。
https://stackoverflow.com/questions/8149484
复制相似问题