我知道我知道:这可能是被问得最多的问题之一。在你给我发送一些LMGTFY链接之前,让我告诉你,我已经花了几个小时来解决这个问题,我已经尝试了一些无效,PostInvalidate,RunOnUIThread等,但都没有成功。我没有放弃解决方案可以是前面提到的其中之一,并且我一直没有正确地使用它。我实际上正在学习Xamarin,做我的第一个跨平台应用程序,所以我对框架的了解非常差。
现在让我们来看看我的具体问题,让我们看看是否有人可以帮助我。我想为我的应用程序有一个介绍页面,有一个进度条和下面的文字说明应用程序正在做什么(当启动应用程序时,它调用WS来下载更改,并且必须从文本文件加载信息并将其放入一些静态数据结构中以供所有页面使用)。我希望在加载页面中执行以下顺序: 1.更改文本以告知应用程序正在做什么。2.调用WS或加载文件。3.更新进度条。4.转到下一次更新或欢迎页面(如果已加载所有内容)。
对于我的实际代码,我得到的是页面在所有内容完成时加载,所以我看到进度条完成,最后一个文本更改。但这是一个静态页面,我看不到进度条在增长,文本也没有变化。
这是我的代码:
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:
<?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方法中的进度条和标签。但首先,我必须学会如何做这些简单的事情,然后再尝试一些更复杂的事情。
提前感谢!
发布于 2018-09-05 22:47:56
与其像您一样设置进度属性,不如尝试在异步方法中使用进度条的ProgressTo方法。类似于:
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";
}这有一个额外的好处,那就是实际看到进度条在移动,而不仅仅是从一个值跳到另一个值。
https://stackoverflow.com/questions/52180629
复制相似问题