while (CanRun) { await Dispatcher.RunIdleAsync((_) => { if (!CanRun) return; DoSomeOperation(); }); Dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessOneAndAllPending); }