在inavationaware和Prism中使用异步任务

本文关键字:异步 任务 inavationaware Prism | 更新日期: 2023-09-27 17:51:19

如何将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 */           
    }
    //[...]
}

在inavationaware和Prism中使用异步任务

根据我从问题中收集到的信息,这应该可以解决这个问题。我对我正在做的一个项目做了一个快速测试,看看这个概念是否有效。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());            
    }
    //[...]
}

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