MVVM - 长时间运行的操作,没有异步等待

本文关键字:异步 等待 操作 长时间 运行 MVVM | 更新日期: 2023-09-27 18:30:50

我想开始长时间运行的操作,例如从 ViewModel 请求网页,并在我的视图上执行一些进度更新操作。以前,我通过await模型的async方法轻松实现了这一点,但在当前项目中,我受到 .NET 4.0 的限制,因此无法使用 C#5 功能。

推荐的方法是什么?

MVVM - 长时间运行的操作,没有异步等待

使用这个 -

Task.Factory.StartNew(() => 
{
   // Code to load web page or any code you want to run asynchronously
}).ContinueWith(task => 
{
   // Code you want to execute on completion of the above synchronous task,
}, UIHelper.GetUITaskScheduler());

其中 UIHelper 类具有以下静态方法 -

public class UIHelper
{
   /* Some other methods */
   public static TaskScheduler GetUITaskScheduler()
   {
      TaskScheduler scheduler = null;
      Application.Current.Dispatcher.Invoke(() =>
      {
         scheduler = TaskScheduler.FromCurrentSynchronizationContext();
      });
      return scheduler;
   }    
}

使用 RXhttps://rx.codeplex.com/

您还可以在 SyncronizationContext.Current 上观察

看看他们...