Stopwath tijd refresh

Status
Niet open voor verdere reacties.

rambomambo

Gebruiker
Lid geworden
9 dec 2012
Berichten
163
Beste

ik ben begonnen met een stopwatch te maken.
Waarvan ik de tijden dan later kan opslaan in een database

Probleem is

als ik op start klik wil ik me stopwatch zien lopen.
Nu moet ik telkens op start klikken om mijn upgedate tijd te zien.

Code:
 public partial class MainWindow : Window
    {
         Stopwatch st = new Stopwatch();
        public MainWindow()
        {
         
            InitializeComponent();
            TimePrint();
           
        
        }
        

        private void btnStart_Click(object sender, RoutedEventArgs e)
        {
            st.Start();
            TimePrint();
        }
         

        private void TimePrint()
        {
            lblTimer.Content = "Tijd " + st.Elapsed;
           
        }

        private void btnStop_Click(object sender, RoutedEventArgs e)
        {
            st.Stop();
          //  st.Reset();
            TimePrint();
        }
     
      
   
    }
}
 
Elke seconde (of iets dergelijks) de waarde van stopwatch uitlezen en je scherm updaten? Eventueel met een thread?
 
ja ik zou dus willen dat ik de stopwatch tijd elke seconde zie veranderen op mijn scherm.

Nu moet ik telkens op de button klikken voor te zien welke waarde de stopwatch heeft.

Ik dacht aan een loop maarja denk dat dit niet gaat werken.
 
Als je iets wil terwijl er ook iets anders gebeurt kom je veelal terecht bij threads, tenzij het object in kwestie al een asynchone feedback geeft. Echter lijkt dat niet het geval bij "stopwatch".

De aanpak is een beetje afhankelijk van hoe nauwkeurig en frequent de update moet zijn. Mogelijk is een aparte thread overkill voor alleen een regelmatige update van een label.
 
klein voorbeeldje waar je eens mee kunt testen, pas de interval (in ms) van de timer aan hoe je het wilt hebben, en uiteraard hoe je het wilt laten zien aan de gebruiker. Hier zie je daadwerkelijk de mili/micro/etc seconden ook voorbij schieten omdat de interval klein is.

xaml:
Code:
<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="200" Width="300">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <TextBlock Name="DisplayTextBlock" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20"/>

        <StackPanel Grid.Row="1">
            <Button Content="Start" Click="StartClick" Margin="5,0,5,5"/>
            <Button Content="Stop" Click="StopClick" Margin="5,0,5,5" />
            <Button Content="Reset" Click="ResetClick" Margin="5,0,5,5" />
        </StackPanel>
    </Grid>
</Window>


code:
[CPP]public partial class MainWindow : Window
{
private Stopwatch _sw;
private Timer _timer;

public MainWindow()
{
InitializeComponent();

_sw = new Stopwatch();

_timer = new Timer();
_timer.Interval = 10;
_timer.Elapsed += TimerElapsed;
}

private void TimerElapsed(object sender, ElapsedEventArgs e)
{
Dispatcher.InvokeAsync(() => { DisplayTextBlock.Text = _sw.Elapsed.ToString(); });
}

private void StartClick(object sender, RoutedEventArgs e)
{
_sw.Start();
_timer.Start();
}
private void StopClick(object sender, RoutedEventArgs e)
{
_sw.Stop();
_timer.Stop();
}
private void ResetClick(object sender, RoutedEventArgs e)
{
_sw.Reset();
DisplayTextBlock.Text = _sw.Elapsed.ToString();
}
}[/CPP]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan