4
janvier
2010
Utilisation d’un timer en WPF
janvier
2010
Un article de perpetualsnow
2 Commentaires
Ce message pourra faire rire les habitués à WPF, mais son objectif est de faire gagner un temps précieux à ceux qui voudront créer un timer sous WPF.
Si on utilise un timer de la classe Timer pour accéder aux objets de la fenêtre WPF, on reçoit deux exceptions :
1. Le thread appelant n’est pas en mode STA.
2. Le thread appelant n’est pas propriétaire de l’objet.
En effet, WPF permet à un seul et unique thread (celui de la fenêtre principale) d’accéder à ces objets. Il est donc impossible d’utiliser un Timer accédant à ces objets.
Cela est quand même rendu possible par la classe DispatcherTimer :
messageTimer = new DispatcherTimer();
messageTimer.Tick += new EventHandler(messageTimer_Tick);
messageTimer.Interval = new TimeSpan(0, 0, 0, 0, 500);
messageTimer.Start();
messageTimer.Tick += new EventHandler(messageTimer_Tick);
messageTimer.Interval = new TimeSpan(0, 0, 0, 0, 500);
messageTimer.Start();
void messageTimer_Tick(object sender, EventArgs e)
{
while (messageQueue.Count > 0)
{
TextBlock tb = new TextBlock();
tb.Text = DateTime.Now + " : " + messageQueue.Dequeue();
spMessage.Children.Insert(0, tb);
}
}
{
while (messageQueue.Count > 0)
{
TextBlock tb = new TextBlock();
tb.Text = DateTime.Now + " : " + messageQueue.Dequeue();
spMessage.Children.Insert(0, tb);
}
}
Bon code et à bientôt.
Bonjour,
Un grand merci pour ce petit post simple et efficace.
cordialement
Je ne sais pas trop combien de lectures il y a eu pour cet article, mais je te dirai simplement : « You saved my day ».
Merci.