I can't execute your code (I don't have those libraries you use), but can you use another priority? I don't know... maybe you have an animation or similar that is never really letting the application become idle. Note: Seeing your code, you don't need to use a DispatcherTimer. It is enough to do a Dispatcher.BeginInvoke to call your delegate. This will also guarantee that it will execute only once, as soon as all the messages (including the actual one) are processed. In fact, I think your problem is that you never started your timer.