WPF、MVVM和异步工作
我知道以前这里有人问过这个问题,但我已经通读了几个对我没有帮助的答案 我有一个组合框,需要从数据库中获取一些与选择相关的信息(可能是关于失去焦点,以便在滚动期间停止一千个调用)。这些信息仅用于显示,并不重要,因此进入后台线程/任务听起来是完美的解决方案。但它确实需要几秒钟,因为它从一些非常大的表中获取计数。用户应该可以自由地继续执行其他任务,因为这些信息实际上仅用于显示/参考 主张使用后台工作人员,但此解决方案有两个问题。1) 当辅助进程已在运行时更改选择会导致问题。您可以不在第二次启动它,这意味着当它返回时,它不再显示新选择的有效信息,或者尝试取消它(这并不总是有效)。2) 由于某些原因,我无法解释,如果方法在模型中,那么实际访问后台工作程序数据库的方法返回的速度比在ViewModel中慢,我认为ViewModel不属于该方法。我真的不知道为什么 有好几票,但OP的问题措辞非常糟糕,选择的答案只是说“是的,应该行。” 看起来很有希望,但是链接的视频有一个小时长(我看了整件事),只涉及调度员10-15秒,没有解释。如果有人链接到一篇更深入地介绍这种方法的文章,那就好了 线程池可能是最好的方法,因为多个查找请求只是排队,而不是导致已经运行的错误。但是,它没有解释如何使用线程池,而是链接到MSDN文章。如果有人链接到一篇更深入地介绍这种方法的文章,那将是理想的,因为这似乎是更好的解决方案(当然,我可能是错的)WPF、MVVM和异步工作,wpf,asynchronous,backgroundworker,threadpool,dispatcher,Wpf,Asynchronous,Backgroundworker,Threadpool,Dispatcher,我知道以前这里有人问过这个问题,但我已经通读了几个对我没有帮助的答案 我有一个组合框,需要从数据库中获取一些与选择相关的信息(可能是关于失去焦点,以便在滚动期间停止一千个调用)。这些信息仅用于显示,并不重要,因此进入后台线程/任务听起来是完美的解决方案。但它确实需要几秒钟,因为它从一些非常大的表中获取计数。用户应该可以自由地继续执行其他任务,因为这些信息实际上仅用于显示/参考 主张使用后台工作人员,但此解决方案有两个问题。1) 当辅助进程已在运行时更改选择会导致问题。您可以不在第二次启动它,这意
我真的试着做了这方面的研究,但大多数答案只是告诉你使用什么方法,而不是如何使用它。我真的在寻找“操作方法”。您可以尝试使用异步绑定:
<ComboBox Name="theCombo" ... />
<TextBlock Text="{Binding Path=SomeSlowProperty, ElementName=theCombo, IsAsync=True}" />
好的。你的问题:
注意:如果您的操作不昂贵,则不必使用取消令牌。只允许任务运行到完成,但忽略结果。但是,仍然建议您尽早取消数据库查询,尽管它在客户端计算机上并不昂贵,但在服务器上却很昂贵。您希望异步执行什么操作?1) 是否加载并填充组合框项目?2) 当用户选择项目时,是否执行其他操作?你应该把问题中的其他东西都去掉,把它说清楚,详细说明你的实际问题。我认为这很清楚。我不需要填充组合框,我需要从数据库中获取与所做选择相关的信息,并在UI上显示这些信息。我的问题是,有几种解决方案被认为是关于stackoverflow的答案,但没有解释。如果我删除了问题的这一部分,恐怕我会得到指向这些答案的链接,或者类似的简短回答。这听起来很不错,但在测试之前我无法将其标记为答案,因为我不知道如何使用RX或Async CTP,我将不得不在网上搜索教程。如果你有一个链接到一个可能会加快事情的速度。谢谢你给了我一个很好的回答!