Synchronous Wait Without Blocking the UI-Thread
You can use a DispatcherTimer
for that sort of thing.
Edit: This might do as well...
private void Wait(double seconds){ var frame = new DispatcherFrame(); new Thread((ThreadStart)(() => { Thread.Sleep(TimeSpan.FromSeconds(seconds)); frame.Continue = false; })).Start(); Dispatcher.PushFrame(frame);}
(Dispatcher.PushFrame
documentation.)
Starting with .NET 4.5 you can use async
event handlers and Task.Delay
to get the same behaviour. To simply let the UI update during such a handler return Dispatcher.Yield
.
Here is a solution with Task.Delay
. I'm using it in unit-tests for ViewModel
s that use DispatcherTimer
.
var frame = new DispatcherFrame();var t = Task.Run( async () => { await Task.Delay(TimeSpan.FromSeconds(1.5)); frame.Continue = false; });Dispatcher.PushFrame(frame);t.Wait();