使用带有Prism的INavigationAware进行异步任务

时间:2016-06-26 16:58:30

标签: c# prism prism-6

如果此方法不是async,如何将async方法调用到实现接口的方法中?

在我的ViewModel中,我有一个async方法,每次用户导航到视图时都应执行该方法。

我能找到的最快(坏)解决方案就是这个

public class MyViewModel : INavigationAware
{
    //[...]
    public async void OnNavigatedTo(NavigationContext navigationContext)
    {
        await Refresh();
    }
    public async Task Refresh()
    {
        await Task.Run(() => 
        {
           // Asynchronous work
        });
        /* Actions on Gui Thread */           
    }
    //[...]
}

1 个答案:

答案 0 :(得分:0)

这应该适用于此,基于我可以从问题中收集的内容。我正在对我正在研究的项目进行快速测试,看看概念是否有效。每次使用此视图模型导航到视图时,都应运行Refresh方法。

public class MyViewModel : INavigationAware
{
    //[...]
    public void OnNavigatedTo(NavigationContext navigationContext)
    {
        Refresh();
    }
    public async void Refresh()
    {
        await Task.Run(() => 
        {
           // Asynchronous work
        }).ContinueWith(t=> /* Actions on Gui Thread */, TaskScheduler.FromCurrentSynchronizationContext());            
    }
    //[...]
}

我删除了async/await上的OnNavigatedTo,并将该调用称为async Refresh方法,不返回任何内容。