none
Como colocar um textblock que se atualiza sozinho no meu app RRS feed

  • Pergunta

  • Preciso colocar na tela do meu app, um textbloc onde vai ter uma contagem regressiva, preciso que a cada segundo, o texto seja alterado, como posso fazer isso?

    Lembrando que não posso travar o app enquanto ele estiver fazendo a contagem, precisa ser independente.


    Luiz Henrique Proenca - IRON_MAN



    • Editado lhp_iron quinta-feira, 30 de abril de 2015 16:39 Solução
    • Editado Marcos SJ quinta-feira, 11 de fevereiro de 2016 16:29 Edição de título
    segunda-feira, 20 de abril de 2015 18:42

Respostas

  • Olá Luiz,

    Acredito que você esteja pensando em executar a sua aplicação em “Segundo plano”, em “background”.

    Para isso, entre outras coisas, você precisa registrar a sua aplicação. Este processo vai garantir que a sua aplicação obedeça a regras bem definidas dentro do “Store”. Para maiores detalhes veja em https://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh977056(v=win.10).aspx

    Espero ter ajudado.

    Veiga

    terça-feira, 21 de abril de 2015 21:11
    Moderador
  • Olá Luiz,

    Fiz isso usando o “DispatcherTimer”

    MainPage.xaml.cs:

        public sealed partial class MainPage : Page

        {

            private static DateTime EndTime { get; set; }

            private DispatcherTimer dispatcherTimer;

           

            public MainPage()

            {

                this.InitializeComponent();

                this.NavigationCacheMode = NavigationCacheMode.Required;

                EndTime = DateTime.MinValue;

            }

            private void btnStartClick(object sender, RoutedEventArgs e)

            {

                if (this.dispatcherTimer == null)

                {

                    this.dispatcherTimer = new DispatcherTimer();

                    this.dispatcherTimer.Interval = TimeSpan.FromMilliseconds(100);

                    this.dispatcherTimer.Tick += dispatcherTimer_Tick;

                }

                if (EndTime == DateTime.MinValue)

                {

                    EndTime = DateTime.Now + TimeSpan.FromMinutes(5);

                }

                this.dispatcherTimer.Start();

            }

            private void dispatcherTimer_Tick(object sender, object e)

            {

                var remaining = EndTime - DateTime.Now;

                int remainingSeconds = (int)remaining.TotalSeconds;

                TimeTextBlock.Text = TimeSpan.FromSeconds(remainingSeconds).ToString();

                if (remaining.TotalSeconds <= 0)

                {

                    this.dispatcherTimer.Stop();

                }

            }

            private void btnPauseClick(object sender, RoutedEventArgs e)

            {

                dispatcherTimer.Stop();

            }

            private void btnStopClick(object sender, RoutedEventArgs e)

            {

                dispatcherTimer.Stop();

                EndTime = DateTime.MinValue;

                TimeTextBlock.Text = TimeSpan.FromSeconds(0).ToString();

            }

        }

    Classe:

        public sealed class TimeTicking : Control

        {

            public TimeTicking()

            {

                this.DefaultStyleKey = typeof(TimeTicking);

            }

        }

    MainPage.xaml:

        <Grid>

            <TextBlock x:Name="TimeTextBlock" FontSize="36" HorizontalAlignment="Left" Height="50" Margin="101,173,0,0" TextWrapping="Wrap" Text="00:00:00" VerticalAlignment="Top" Width="137" />

            <Button Content="Start" Margin="20,292,0,291" Click="btnStartClick"/>

            <Button Content="Reset" Click="btnStopClick" Margin="248,292,0,291"/>

            <Button Content="Pause" Click="btnPauseClick" Margin="134,292,0,291"/>

        </Grid>

    Boa sorte,

    Veiga

    segunda-feira, 27 de abril de 2015 16:13
    Moderador
  • A solução enviada pelo VEIGA deu certo para o que eu queria

    Luiz Henrique Proenca - IRON_MAN

    quinta-feira, 30 de abril de 2015 16:39

Todas as Respostas

  • Olá Luiz,

    Acredito que você esteja pensando em executar a sua aplicação em “Segundo plano”, em “background”.

    Para isso, entre outras coisas, você precisa registrar a sua aplicação. Este processo vai garantir que a sua aplicação obedeça a regras bem definidas dentro do “Store”. Para maiores detalhes veja em https://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh977056(v=win.10).aspx

    Espero ter ajudado.

    Veiga

    terça-feira, 21 de abril de 2015 21:11
    Moderador
  • A minha intenção não é rodar em background, quero que enquanto o usuario visualiza a tela, um textblock seja atualizado a cada segundo no estilo: "04:58", "04:57", "04:56", "04:55"...

    Luiz Henrique Proenca - IRON_MAN

    quarta-feira, 22 de abril de 2015 19:08
  • Olá Luiz,

    Fiz isso usando o “DispatcherTimer”

    MainPage.xaml.cs:

        public sealed partial class MainPage : Page

        {

            private static DateTime EndTime { get; set; }

            private DispatcherTimer dispatcherTimer;

           

            public MainPage()

            {

                this.InitializeComponent();

                this.NavigationCacheMode = NavigationCacheMode.Required;

                EndTime = DateTime.MinValue;

            }

            private void btnStartClick(object sender, RoutedEventArgs e)

            {

                if (this.dispatcherTimer == null)

                {

                    this.dispatcherTimer = new DispatcherTimer();

                    this.dispatcherTimer.Interval = TimeSpan.FromMilliseconds(100);

                    this.dispatcherTimer.Tick += dispatcherTimer_Tick;

                }

                if (EndTime == DateTime.MinValue)

                {

                    EndTime = DateTime.Now + TimeSpan.FromMinutes(5);

                }

                this.dispatcherTimer.Start();

            }

            private void dispatcherTimer_Tick(object sender, object e)

            {

                var remaining = EndTime - DateTime.Now;

                int remainingSeconds = (int)remaining.TotalSeconds;

                TimeTextBlock.Text = TimeSpan.FromSeconds(remainingSeconds).ToString();

                if (remaining.TotalSeconds <= 0)

                {

                    this.dispatcherTimer.Stop();

                }

            }

            private void btnPauseClick(object sender, RoutedEventArgs e)

            {

                dispatcherTimer.Stop();

            }

            private void btnStopClick(object sender, RoutedEventArgs e)

            {

                dispatcherTimer.Stop();

                EndTime = DateTime.MinValue;

                TimeTextBlock.Text = TimeSpan.FromSeconds(0).ToString();

            }

        }

    Classe:

        public sealed class TimeTicking : Control

        {

            public TimeTicking()

            {

                this.DefaultStyleKey = typeof(TimeTicking);

            }

        }

    MainPage.xaml:

        <Grid>

            <TextBlock x:Name="TimeTextBlock" FontSize="36" HorizontalAlignment="Left" Height="50" Margin="101,173,0,0" TextWrapping="Wrap" Text="00:00:00" VerticalAlignment="Top" Width="137" />

            <Button Content="Start" Margin="20,292,0,291" Click="btnStartClick"/>

            <Button Content="Reset" Click="btnStopClick" Margin="248,292,0,291"/>

            <Button Content="Pause" Click="btnPauseClick" Margin="134,292,0,291"/>

        </Grid>

    Boa sorte,

    Veiga

    segunda-feira, 27 de abril de 2015 16:13
    Moderador
  • A solução enviada pelo VEIGA deu certo para o que eu queria

    Luiz Henrique Proenca - IRON_MAN

    quinta-feira, 30 de abril de 2015 16:39