Я знаю, я знаю: наверное, это один из самых часто задаваемых вопросов. Прежде чем вы отправите мне несколько ссылок LMGTFY, позвольте мне сказать, что я несколько часов занимался этим вопросом, и я сделал несколько попыток с Invalidate, 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>
Это только альфа-версия. Я хотел бы конкретизировать немного больше, потому что мне нужно загрузить около 10 различных текстовых файлов, и я хотел бы обновить индикатор выполнения и метку внутри методов App.localInfo. Но сначала я должен научиться делать эти простые вещи, а затем попробовать что-то более сложное.
Заранее спасибо!