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

时间:2014-11-17 14:27:26

标签: c# asynchronous

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

建议的方法是什么?

2 个答案:

答案 0 :(得分:1)

使用此 -

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;
   }    
}

答案 1 :(得分:0)

使用RX https://rx.codeplex.com/

您还可以在SyncronizationContext.Current

上观察

检查出来......