Usuário com melhor resposta
Como colocar um textblock que se atualiza sozinho no meu app

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
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
- Sugerido como Resposta Eduardo.Romero quarta-feira, 22 de abril de 2015 12:21
- Marcado como Resposta Eduardo.Romero quarta-feira, 22 de abril de 2015 12:21
terça-feira, 21 de abril de 2015 21:11 -
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
- Editado Veiga - [MSFT]Microsoft employee segunda-feira, 27 de abril de 2015 16:14 error
- Marcado como Resposta lhp_iron quinta-feira, 30 de abril de 2015 16:38
segunda-feira, 27 de abril de 2015 16:13 -
A solução enviada pelo VEIGA deu certo para o que eu queria
Luiz Henrique Proenca - IRON_MAN
- Marcado como Resposta Veiga - [MSFT]Microsoft employee segunda-feira, 4 de maio de 2015 14:18
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
- Sugerido como Resposta Eduardo.Romero quarta-feira, 22 de abril de 2015 12:21
- Marcado como Resposta Eduardo.Romero quarta-feira, 22 de abril de 2015 12:21
terça-feira, 21 de abril de 2015 21:11 -
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
- Editado Veiga - [MSFT]Microsoft employee segunda-feira, 27 de abril de 2015 16:14 error
- Marcado como Resposta lhp_iron quinta-feira, 30 de abril de 2015 16:38
segunda-feira, 27 de abril de 2015 16:13 -
A solução enviada pelo VEIGA deu certo para o que eu queria
Luiz Henrique Proenca - IRON_MAN
- Marcado como Resposta Veiga - [MSFT]Microsoft employee segunda-feira, 4 de maio de 2015 14:18
quinta-feira, 30 de abril de 2015 16:39