简体   繁体   中英

MVVM - long-running operation without async-await

I want to start long-running operation like requesting a web page from ViewModel, and perform some progress-update operations on my View. Before, I easily achieved this by await ing my Model's async methods, but in current project I'm restricted with .NET 4.0, so I can't use C#5 features.

What is the recommended way of doing this?

Use this -

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());

wherein the UIHelper class has the following static method -

public class UIHelper
{
   /* Some other methods */

   public static TaskScheduler GetUITaskScheduler()
   {
      TaskScheduler scheduler = null;
      Application.Current.Dispatcher.Invoke(() =>
      {
         scheduler = TaskScheduler.FromCurrentSynchronizationContext();
      });
      return scheduler;
   }    
}

use RX https://rx.codeplex.com/

You can also observe on the SyncronizationContext.Current

Check them out...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM