Timer in UWP App which isn't linked to the UI

Yes - you can for example use Timer class - though you must remember that it run on separate thread. Example:

private Timer timer;
public MainPage()
{        
    this.InitializeComponent();
    timer = new Timer(timerCallback, null, (int)TimeSpan.FromMinutes(1).TotalMilliseconds, Timeout.Infinite);
}

private async void timerCallback(object state)
{
    // do some work not connected with UI

    await Window.Current.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
        () => {
            // do some work on UI here;
        });
}

Note that the work dispatched on UI dispatcher may not be processed right away - it depend on dispatcher's workload.

Also remember that this timer runs along with your app and won't work when app is suspended.


I resolved this issue recently using a ThreadPoolTimer class.

ThreadPoolTimer timer = ThreadPoolTimer.CreatePeriodicTimer((t) =>
        {
            //do some work \ dispatch to UI thread as needed
        }, TimeSpan.FromMinutes(1));

At present I am not aware of any advantage of this over the Timer solution already posted, but it has functioned well.

Tags:

C#

Timer

Uwp