mercredi 12 décembre 2012

Minuteur (Timer).

Lorsque nous ouvrons une fenêtre, il est possible de lui attribuer des minuteurs (Timer) afin de déclencher une action à intervalles de temps réguliers. Dans l'exemple suivant, je vais créer une fenêtre qui va afficher la date toutes les 5 secondes.

 
#Ouvre une fenêtre.
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$form = New-Object Windows.Forms.Form
$form.text = "Timer"            
$form.Size = New-Object System.Drawing.Size(160,110)

#Création d'un label (Label).
$label1 = New-Object Windows.Forms.Label
$label1.Location = New-Object Drawing.Point 20,30
$label1.Size = New-Object Drawing.Point 150,16
$label1.Text = date

#Minuteur (Timer).
$timer1 = new-object System.Windows.forms.timer
$timer1.Interval = 5000              #en milliseconds
$timer1.Add_Tick({   $label1.Text = date   })
$timer1.Start()

#Attache le contrôle à la fenêtre.
$form.controls.add($label1)

#Affiche le tout.
$form.ShowDialog()

#Libère le timer.
$timer1.Stop()

#Fin.

Lorsque le script du minuteur est en cours d'exécution, la fenêtre est gelée. Il n'est alors plus possible d'actionner les contrôles ou de fermer la fenêtre. Dans notre exemple, le script du minuteur s'exécute très rapidement. Cela passe donc inaperçu. Mais si nous devions exécuter un script plus long, cela pourrait poser un problème. Si c'est le cas, regardez du côté des runspaces.