Не работает ли все ваше приложение, когда срабатывает таймер, или же весь процесс слишком быстр, чтобы это замечать?
Я предполагаю, что вы можете синхронно вызывать код на DispatcherTimer, что может привести к краткомумоменты безответственности (и, возможно, песочные часы).Чтобы обойти это, убедитесь, что событие Tick вашего Dispatcher имеет асинхронный код.
Вот простой маленький пример, который каждые 3 секунды выполняет секунду поддельной работы, а затем обновляет графический интерфейс:
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();
}
}
(Существуют и другие методы для достижения тех же целей, этот способ можно было легко отработать. Более подробную информацию см. В руководстве здесь: http://msdn.microsoft.com/en-us/magazine/cc163328.aspx)