ICommand.CanExecute async

Ben*_*ual 2 c# wpf command asynchronous

我有一个Command,检查CanExecute需要很长时间.现在,我问我,是否可以运行CanExecute异步方法?

dow*_*for 6

嗯有可能.你应该使用CanExecutedChanged.在后台进行持久检查(可以使用BackgroundWorker),如果可以执行或不执行,则存储结果,触发事件并返回缓存中的缓存值CanExecute.


slu*_*ter 5

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

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

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