最近我一直在花时间尝试弄清楚如何从.NET MAUI中的同步 UI事件方法运行异步方法或命令,最后,我得出了一个结论,我将向某人解释谁像我一样在寻找它,却没有找到真正有用的东西。
问题示例是:
我有一个带有 ViewModel 的 MainPage,当单击按钮时,它会在 ViewModel 中执行命令,通过 Shell 导航方法将用户导航到新的 ContentPage,并且当此 导航完成,我想从第二个 ContentPage 的 ViewModel 执行一个方法,我尝试通过重写第二个 ContentPage 的 OnNavigedTo 方法来执行此操作,然后从那里调用其上的方法或命令ViewModel,但要调用的命令或方法是异步,而OnNavigedTo方法是同步,所以:
如何调用异步方法而不导致 UI 和应用程序异步流程出现问题?
让我们以 ContentPage 类为例,它将成为我们的 MainPage:
public partial class MainPage : ContentPage
{
private readonly MainPageViewModel _viewModel;
public MainPage(MainPageViewModel mainPageViewModel)
{
_viewModel = mainPageViewModel;
BindingContext = _viewModel;
InitializeComponent();
}
}
及其 ViewModel:
public partial class MainPageViewModel : BaseViewModel
{
//Consider that this method is a Command and is binded to a button click
public async Task GoToOtherPage() {
await Shell.Current.GoToAsync(nameof(OtherPage));
}
}
现在另一边有一个OtherPage:
public partial class OtherPage : ContentPage
{
private readonly OtherPageViewModel _viewModel;
public OtherPage(OtherPageViewModel otherPageViewModel)
{
_viewModel = otherPageViewModel;
BindingContext = _viewModel;
InitializeComponent();
}
}
及其 ViewModel:
public partial class OtherPageViewModel : BaseViewModel
{
//This is the asynchronous method to be called when the user navigates to this page
public async Task OnNavigatedTo()
{
//Do something asynchronously
}
}
现在我尝试通过重写 OtherPage 的 OnNavigedTo 方法来调用它:
public partial class OtherPage : ContentPage
{
private readonly OtherPageViewModel _viewModel;
public OtherPage(OtherPageViewModel otherPageViewModel)
{
_viewModel = otherPageViewModel;
BindingContext = _viewModel;
InitializeComponent();
}
public override void OnNavigatedTo()
{
_viewModel.OnNavigatedTo().Wait();
}
}
但应用程序运行时处于“中断状态”。 我能做什么?