Est-ce que toute l'application ne répond plus lorsque la minuterie se déclenche également, ou est-ce que le processus est trop rapide pour être remarqué ?
Je suppose que vous invoquez du code de manière synchrone sur votre DispatcherTimer, ce qui pourrait provoquer de brefs moments de non-réponse (et peut-être le sablier). Pour contourner ce problème, assurez-vous que l'événement Tick de votre Dispatcher est un code asynchrone.
Voici un petit exemple simple qui, toutes les 3 secondes, effectue une seconde de faux travail puis met à jour l'interface graphique :
public partial class MainWindow : Window
{
private static int foo = 0;
public MainWindow()
{
InitializeComponent();
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(3000);
timer.Tick += new EventHandler(delegate(object o, EventArgs args)
{
StatusBox.Text = "Incrementing";
ThreadStart start = delegate()
{
// Simulate work
Thread.Sleep(1000);
// Update gui
this.Dispatcher.BeginInvoke(new Action(delegate
{
CountingBox.Text = (foo++).ToString();
StatusBox.Text = "Waiting";
}));
};
new Thread(start).Start();
});
timer.Start();
}
}
(Il existe d'autres méthodes pour atteindre les mêmes objectifs, mais celle-ci était simple à énoncer. Voir les conseils ici pour plus d'informations : http://msdn.microsoft.com/en-us/magazine/cc163328.aspx )