2014-11-17 5 views
1

Я хочу начать долговременную работу, например запрашивать веб-страницу из ViewModel, и выполнять некоторые операции обновления обновления на моем представлении. Раньше я легко достигал этого await методов моей модели async, но в текущем проекте я ограничен .NET 4.0, поэтому я не могу использовать функции C# 5.MVVM - долговременная работа без async-ожидания

Каков рекомендуемый способ?

+0

, поэтому вы должны иметь дело с Threading традиционно. В простых случаях он довольно прост в использовании. –

+0

Вам не нужно менять свой код http://stackoverflow.com/questions/19421878/how-can-i-use-the-async-keywords-in-a-project-targeting-net-4-0/ 19421907 # 19421907 –

+0

http://pmichaels.net/2014/08/03/updating-a-progress-bar-using-mvvm-cross/ –

ответ

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

Таким образом я не могу обновить элементы управления View. Они должны обновляться из потока пользовательского интерфейса, а ViewModel не должен зависеть от классов пользовательского интерфейса. – astef

+1

. Вы можете обновлять элементы управления, если вы вызываете методы обновления через диспетчер ui – stijn

+0

Я могу, но это грязный путь. ViewModel становится нецелесообразным, и у вас нет причин его просматривать из View – astef

Смежные вопросы