首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin Forms crossPlatform:强制重绘

Xamarin Forms crossPlatform:强制重绘
EN

Stack Overflow用户
提问于 2018-09-05 16:31:51
回答 1查看 333关注 0票数 2

我知道我知道:这可能是被问得最多的问题之一。在你给我发送一些LMGTFY链接之前,让我告诉你,我已经花了几个小时来解决这个问题,我已经尝试了一些无效,PostInvalidate,RunOnUIThread等,但都没有成功。我没有放弃解决方案可以是前面提到的其中之一,并且我一直没有正确地使用它。我实际上正在学习Xamarin,做我的第一个跨平台应用程序,所以我对框架的了解非常差。

现在让我们来看看我的具体问题,让我们看看是否有人可以帮助我。我想为我的应用程序有一个介绍页面,有一个进度条和下面的文字说明应用程序正在做什么(当启动应用程序时,它调用WS来下载更改,并且必须从文本文件加载信息并将其放入一些静态数据结构中以供所有页面使用)。我希望在加载页面中执行以下顺序: 1.更改文本以告知应用程序正在做什么。2.调用WS或加载文件。3.更新进度条。4.转到下一次更新或欢迎页面(如果已加载所有内容)。

对于我的实际代码,我得到的是页面在所有内容完成时加载,所以我看到进度条完成,最后一个文本更改。但这是一个静态页面,我看不到进度条在增长,文本也没有变化。

这是我的代码:

代码语言:javascript
复制
 public partial class LoadingPage : ContentPage
 { 
        InitializeComponent();
        this.lpb.Text = "Connecting to web server to check updates";
        App.localInfo.updateInfo(); //Connect web server to check updates
        this.pb.Progress = 0.2;
        this.lpb.Text = "Loading info from local files";
        App.localInfo.cargarInfo(); //Load local files to memory for quick access
        this.pb.Progress = 0.7;
        this.lpb.Text = "Doing other stuff"; //This is only for proves

        Task.Run(async () =>
        {
            await Task.Delay(2000);
        });

        this.pb.Progress = 1;
        this.lpb.Text = "Load completed. The app will start now";
 } 

这是我的ContentPage:

代码语言:javascript
复制
 <?xml version="1.0" encoding="utf-8" ?>
 <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="Prueba1.Views.LoadingPage">
     <ContentPage.Content>
         <StackLayout>
             <ProgressBar x:Name="pb" Progress="0.0" ProgressColor="Red"/>
             <Label x:Name="lpb" Text="Welcome to Xamarin.Forms!"/>
         </StackLayout>
     </ContentPage.Content>
 </ContentPage>

这只是alpha版本。我想具体一点,因为我必须加载大约10个不同的文本文件,并且我想更新App.localInfo方法中的进度条和标签。但首先,我必须学会如何做这些简单的事情,然后再尝试一些更复杂的事情。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-05 22:47:56

与其像您一样设置进度属性,不如尝试在异步方法中使用进度条的ProgressTo方法。类似于:

代码语言:javascript
复制
public MainPage()
    {
        InitializeComponent();

        FireProgressBar();
    }

    async void FireProgressBar()
    {
        lpb.Text = "Connecting to web server to check updates";

        // Task.Delay to simulate network call.
        await Task.Delay(2000);

        await pb.ProgressTo(.2, 250, Easing.Linear);

        lpb.Text = "Loading info from local files";

        // Task.Delay to simulate network call.
        await Task.Delay(2000);

        await pb.ProgressTo(.7, 250, Easing.Linear);

        lpb.Text = "Doing other stuff";

        // Task.Delay to simulate network call.
        await Task.Delay(2000);

        await pb.ProgressTo(1.0, 250, Easing.Linear);

        lpb.Text = "Load completed. The app will start now";
    }

这有一个额外的好处,那就是实际看到进度条在移动,而不仅仅是从一个值跳到另一个值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52180629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档