C# 用户对话框加载未显示

C# 用户对话框加载未显示,c#,xamarin,mvvmcross,C#,Xamarin,Mvvmcross,我试图看到加载进度如下,但它没有显示 View.cs ViewModel.cs 如果您正在使用,请注意它已被弃用,您应该直接使用 检查是否已按如下方式正确初始化: 您必须在PCL项目的App.cs中注册它: Mvx.RegisterSingleton=>UserDialogs.Instance 以及您主要活动中android平台项目的init: UserDialogs.Init=>Mvx.Resolve.Activity 另一件需要考虑的事情是,您应该将其作为IUserDialogs注入到构造函

我试图看到加载进度如下,但它没有显示

View.cs

ViewModel.cs

如果您正在使用,请注意它已被弃用,您应该直接使用

检查是否已按如下方式正确初始化:

您必须在PCL项目的App.cs中注册它:

Mvx.RegisterSingleton=>UserDialogs.Instance

以及您主要活动中android平台项目的init:

UserDialogs.Init=>Mvx.Resolve.Activity

另一件需要考虑的事情是,您应该将其作为IUserDialogs注入到构造函数中。您可以使用静态实例的方式,但通过注入它,它增加了更多的灵活性,并且更易于测试:

private readonly IUserDialogs _dialogs;
public ProgressViewModel(IUserDialogs dialogs)
{
    this._dialogs = dialogs;
}
像这样使用它

private async Task RefreshList()
{
   using (this._dialogs.Loading("Loading..."))
   {
       try
       {
           var task = await this._classService.GetClasses();
       }
       catch(Exception exc)
       {
           // This is done only for debugging to check if here lies the problem
           throw exc;
       }
   }
}
您可以通过调用以下命令来检查它是否正常工作

public ICommand MyTestCommand
{
    get
    {
       return new MvxAsyncCommand(async () =>
       {
         // the following should should Loading for 3 seconds
          using (this._dialogs.Loading("Loading..."))
          {
             await Task.Delay(TimeSpan.FromSeconds(3));
          }
       });
    }
 }

我不喜欢这种方法,但它很管用

Device.BeginInvokeOnMainThread(async () =>
{

    try
    {
        using (UserDialogs.Instance.Loading(("Loading...")))
        {
            await Task.Delay(300);
            await _syncController.SyncData();           
            //Your Service code
        }
    }
    catch (Exception ex)
    {
        var val = ex.Message;
        UserDialogs.Instance.Alert("Test", val.ToString(), "Ok");
    }
});

如果您使用的是加载方法,则应使用ShowLoading方法,例如:

UserDialogs.Instance.ShowLoading("Retrieving data...");

它在哪里不出现?安卓网间网操作系统?你看过输出了吗?你能贴出来吗?我在安卓环境下工作。我无法看到正在加载对话框尝试使用UserDialogs.Instance.ShowLoadingLoading。。。显示它和UserDialogs.Instance.HideLoading;隐藏它直到不显示。我相信它不喜欢在后台线程中运行。我不知道如何处理。您可以尝试用这个包装它。InvokeOnMainThread=>{…};。您的控制台是否显示了可能发生的事情的任何输出?请插入到您的答案中好吗?我已经考虑了两次,它不应该被包装,因为您将无法正确地等待您的类服务。此外,中给出的示例都是异步命令,因此我认为这不是问题所在。你能看看你的输出中是否有什么东西指出了这个问题吗?另外,请将GetClasses调用包装为try-catch,以便查看该调用是否中断,从而在看到对话框之前完成该对话框。为什么要添加wait Task.DelayTimeSpan.fromsSeconds3;,在给定的链接中,他们将其用于演示目的。
public ICommand MyTestCommand
{
    get
    {
       return new MvxAsyncCommand(async () =>
       {
         // the following should should Loading for 3 seconds
          using (this._dialogs.Loading("Loading..."))
          {
             await Task.Delay(TimeSpan.FromSeconds(3));
          }
       });
    }
 }
Device.BeginInvokeOnMainThread(async () =>
{

    try
    {
        using (UserDialogs.Instance.Loading(("Loading...")))
        {
            await Task.Delay(300);
            await _syncController.SyncData();           
            //Your Service code
        }
    }
    catch (Exception ex)
    {
        var val = ex.Message;
        UserDialogs.Instance.Alert("Test", val.ToString(), "Ok");
    }
});
UserDialogs.Instance.ShowLoading("Retrieving data...");