Synchronous Wait Without Blocking the UI-Thread Synchronous Wait Without Blocking the UI-Thread multithreading multithreading

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 ViewModels 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();