Xamarin进度对话框显示和隐藏

时间:2017-11-14 04:04:43

标签: xamarin xamarin.ios xamarin.forms

我在Xamarin应用中显示进度视图时遇到了一些困难。我相信它与不同的线程有关。这是我的代码。

private void NavigateCommand()
    {
       using (UserDialogs.Instance.Loading("Verifying Credentials",null, null, true, MaskType.Black))
                {
                try
                    {
                    var authResult = Task.Run(async () => await _loginService
                                            .Login(Priority.Background, EmailAddress.Value, Password.Value)
                                                  .ConfigureAwait(false)).Result;

                        CacheToken(authResult);
                    }
                    catch { }
                }

            Device.BeginInvokeOnMainThread(() => UserDialogs.Instance.HideLoading());
            _navigationService.NavigateAsync("PageOnePage");
    }

所以现在发生的事情是,在执行第二行(即隐藏代码)之前,进度/加载视图才会显示。它快速闪现,它消失了。我感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

这样的内容可以正常运行,因为它会将UserDialogs / NavigateAsync调用放在UI线程上,Login / CacheToken放在后台线程上:

private void NavigateCommand()
{
    Device.BeginInvokeOnMainThread(async () =>
    {
        using (UserDialogs.Instance.Loading("Verifying Credentials", null, null, true, MaskType.Black))
        {
            await Task.Run(async () =>
            {
                var authResult = await _loginService.Login(Priority.Background, EmailAddress.Value, Password.Value);
                CacheToken(authResult);
            });
            Device.BeginInvokeOnMainThread(() =>
            {
                UserDialogs.Instance.HideLoading();
                _navigationService.NavigateAsync("PageOnePage");
            });
        }
    });
}