How to create Schedule Task in Universal Windows apps?


Schedule tasks are often require to do some clean ups, fetch some records from internet and/or update the live tile/lock screen. There might be some other requirements too. If you want to add schedule tasks in your Windows and/or Windows Phone runtime apps, here you go.

 

In this post, let’s keep it generic and learn, how to create schedule task in universal windows apps. At the end, share your feedback to improve. Don’t forget to share in your network.

 

 

Windows runtime apps are great when you are building apps for both Windows and Windows Phone using the common shared template called Windows Universal Apps. If you are building applications/games targeting universal apps, this post will help you to schedule some tasks on your need, whatever that is!

 

Step 1: Configure your project to host background task

Assuming you already have created a Universal Windows Apps project, I am going further to discuss how to add the task scheduling onto it.

 

1. Create new project

 

First of all, you have to create a new project of template type “Windows Runtime Component”. To do this, right click on your project solution or the app folder within Visual Studio IDE (as shown above) –>Click “Add” from the context menu –> Click “New Project”. This will open the “Add New Project” dialog window in the screen.

 

2. Create new Windows Runtime Component

 

As shown above, navigate to Installed –> Visual C# (or the programming language type that you are using) –> Store Apps –> Universal Apps in the left panel. In the right panel, select the project template that labels “Windows Runtime Component (Portable for Universal Apps)”. Give it a name e.g. “BackgroundTasks” and hit enter.

 

3. Add the project DLL reference of Windows Runtime Component (Background Tasks) project

This will create a new project in your application solution. As it is a portable class library, you can use it in both Windows and Windows Phone application as a reference.

 

In the project, you will see a default class named “Class1”. Rename it to give a proper meaning. For example, we will rename it as “TileUpdateTask.cs”.

 

Now add the portable class library reference in your main projects. That could be either Windows project, Windows Phone project or both.

 

Once you are done with this, we need to add a declaration to the app so that, it can recognize of a background task. Once you add that, your app will run app code even when the app is submitted.

 

Remember that, background tasks are intended for small work items that require no interaction with the user.

 

Also remember that, if you want multiple background tasks to run in your app or game, you can add multiple declarations in the Package.appxmanifest XML file.

 

To do this, open Package.appxmanifest file –> Navigate to “Declarations” tab. Now from the “Available Declarations” panel, select “Background Tasks” and click the “Add” button. This will add it in the supported declarations section. Now in the right side panel, you need to set few properties and settings. In the “Properties” section, there are many supported task types for background tasks. They are “Audio”, “Chat message notification”, “Device use trigger”, “Location”, “Push notification”, “System event” and “Timer”. Select one or more option from the list.

 

4. Add Background Tasks declaration in Package.appxmanifest

 

Now in the “App Settings” panel, set the entry point of the background task. In our case, it is: “BackgroundTasks.TileUpdateTask”, where “BackgroundTasks.TileUpdateTask” is the fully qualified name of the class which will be executed.

 

Step 2: Register your background task

Now the next step is to register the background task in your phone. To do this, Open your xaml.cs page where you want it to register. Override the OnNavigatedTo method and register the background task.

 

Below is the typical code snippet to register your background task as part of your app/game. Before registering the task, you need to call “BackgroundExecutionManager.RequestAccessAsync()”. On Windows, this method presents the user with a dialog box that requests the app can be added to the lock screen. But on Windows Phone, it is little different. This method does not prompt the user here, but this must be called before registering any background tasks.

 

5. Register background task with the system

At the end, create an instance of BackgroundTaskBuilder class, set a identifiable name to it, set the entry point to the fully qualified class name that we added in the Package.appxmanifest file’s declaration page. Set the trigger for the task that you specified in the declaration page. In our case, we selected “Timer” and hence we will create a TimeTrigger here with a value more than 15 minutes. Remember that, a TimeTrigger value must be more than or equal to 15 minutes. If you specify less than 15 minutes, it will throw exception at runtime. Now call the Register() method on BackgroundTaskBuilder object to register it.

 

Step 3: Implement the background task

Finally you will need to implement the background task. Open the code file (in our case, it is: TileUpdateTask.cs in the portal class library project) and implement IBackgroundTask interface, which defines a method named “Run”.

 

6. Write code to run the background task

In the run method, call the GetDeferral() on background task instance that passed as a parameter to the Run method. Then write your code and at the end, call deferal.Complete(). This will make sure that, your application will run even if you are calling any asynchronous method from the background task.

 

Points to Remember:

  1. Create the declaration for each background task in Package.appxmanifest file.
  2. Call BackgroundExecutionManager.RequestAccessAsync() method before registering any background task.
  3. If you are creating a time trigger for your background task, the time should be at least 15 minutes.

 

Hope, you like this post. Don’t forget to drop a line below and share your feedback. Any queries in implementation? Drop your comment here and I will try to respond as soon as possible. In the next post, we will learn how to update a tile from a scheduled task that we created just now. Till then happy coding.

 

Connect with me over Twitter, Facebook, Google+ to get the updates that I share over those social networking sites. Subscribe to my blog’s RSS feed and email newsletter to get the immediate notification of new blog post in your inbox.

 



If you have come this far, it means that you liked what you are reading. Why not reach little more and connect with me directly on Twitter , Facebook , Google+ and LinkedIn . I would love to hear your thoughts and opinions on my articles directly. Also, don't forget to share your views and/or feedback in the comment section below.

11 comments

  1. Very good post. Detailed explanation. Thanks for sharing.

    ReplyDelete
  2. That's a great post.
    However I'm trying to implement this on Windows Universal App (where there's no windows 8/or windows phone project)
    I'm having problems because I cant find some methods as you describe.
    Where I can find the code so I could compare?

    ReplyDelete
  3. Great post, mate! Really helpful :).

    ReplyDelete
  4. Hi , its absolutely necessary have the Background Task Classes in a separate library?.. cannot be part of the main project?

    ReplyDelete
    Replies
    1. The project should be a Windows Runtime Component

      Delete
  5. Great post very helpful, instead of pictures of code the code text would be of great help.

    ReplyDelete
  6. Good description of the process. Helped a lot.

    ReplyDelete
  7. how to create multiple tiles using for loop in windows phone in c#

    ReplyDelete
  8. How can i use PushNotificationTrigger().When i register with PushNotificationtrigger(),I cant see in LifeCycleEvent Menu. How to trigger background task using PushNotificationTrigger()?

    ReplyDelete


 
© 2008-2016 Kunal-Chowdhury.com - Microsoft Technology Blog for developers and consumers | Designed by Kunal Chowdhury
Back to top