C# 用户对话框加载未显示
我试图看到加载进度如下,但它没有显示 View.cs ViewModel.cs 如果您正在使用,请注意它已被弃用,您应该直接使用 检查是否已按如下方式正确初始化: 您必须在PCL项目的App.cs中注册它: Mvx.RegisterSingleton=>UserDialogs.Instance 以及您主要活动中android平台项目的init: UserDialogs.Init=>Mvx.Resolve.Activity 另一件需要考虑的事情是,您应该将其作为IUserDialogs注入到构造函数中。您可以使用静态实例的方式,但通过注入它,它增加了更多的灵活性,并且更易于测试: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注入到构造函
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...");