【问题标题】:await Task.Delay() doesn't work on Xamarin.iOS using MVVMCrossawait Task.Delay() 在使用 MVVMCross 的 Xamarin.iOS 上不起作用
【发布时间】:2019-10-01 11:01:23
【问题描述】:

我正在使用 mvvm 架构开发 Xamarin.iOS 应用程序。问题是,如果我尝试在主 ViewModel 类的 Initialize 方法中运行 await Task.Delay(2000),应用程序会在 LaunchScreen 上停止,而不会出现任何错误消息。 没有这条线,应用程序可以完美运行。

MainViewModel.cs

public override async Task Initialize()
{
    await Task.Delay(2000);
}

任何想法我做错了什么?

编辑: 在我调用 awaitNavigationService.Navigate()

之后,MVVMCross 正在调用 Initialize
public class CustomAppStart : MvxAppStart
{
    public CustomAppStart(IMvxApplication application, IMvxNavigationService navigationService) : base(application, navigationService)
    {
    }
    protected override async Task NavigateToFirstViewModel(object hint = null)
    {
        await NavigationService.Navigate<MainViewModel>();
    }
}

根据文档,我应该可以安全地使用 await:MvvmCross ViewModel Lifecycle

【问题讨论】:

  • 似乎是死锁问题。您的主 UI 线程被调用 Initialize 方法阻塞。你能显示调用 Initialize() 方法的代码吗?
  • @OlegBondarenko 我编辑了描述。
  • 关于正确的调用方法 Initialize 基于文档,您可能是对的。你能在你的覆盖方法中添加await base.Initialize();作为第一行和await Task.Delay(2000);之前吗?
  • @OlegBondarenko 已添加,但没有任何改变 :( 现在我发现了一个存在一年之久的 github 问题,同样的问题,它仍然开放。我不敢相信:/ link
  • 您应该输入答案@kistelekig,以便它的可搜索和SO用户知道它的答案

标签: c# ios xamarin asynchronous xamarin.ios


【解决方案1】:

正如@kistelekig 上面指出的那样,他能够通过将任务延迟放在视图模型的ViewAppearing 生命周期函数中来解决这个问题。所以它看起来像这样

public override async Task ViewAppearing()
{
    base.ViewAppearing()
    await Task.Delay(2000);
    ...
}

【讨论】:

  • 修好了,我的错
猜你喜欢
  • 1970-01-01
  • 2022-10-14
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
相关资源
最近更新 更多