Memperbarui petak langsung dari tugas latar belakang

API Penting

Gunakan tugas latar belakang untuk memperbarui petak langsung aplikasi Anda dengan konten baru.

Berikut adalah video yang menunjukkan cara menambahkan ubin langsung ke aplikasi Anda.

Membuat proyek tugas latar belakang

Untuk mengaktifkan petak langsung untuk aplikasi Anda, tambahkan proyek komponen runtime Windows baru ke solusi Anda. Ini adalah perakitan terpisah yang dimuat dan dijalankan OS di latar belakang saat pengguna menginstal aplikasi Anda.

  1. Di Penjelajah Solusi, klik kanan solusi, klik Tambahkan, lalu klik Project Baru.
  2. Dalam dialog Tambahkan Project Baru, pilih templat Komponen Runtime Windows di bagian Visual C# > Windows Universal Bahasa > Lain yang Diinstal>.
  3. Beri nama proyek BackgroundTasks dan klik atau ketuk OK. Microsoft Visual Studio menambahkan proyek baru ke solusi.
  4. Di proyek utama, tambahkan referensi ke proyek BackgroundTasks.

Menerapkan tugas latar belakang

Terapkan antarmuka IBackgroundTask untuk membuat kelas yang memperbarui petak langsung aplikasi Anda. Pekerjaan latar belakang Anda berjalan dalam metode Jalankan. Dalam hal ini, tugas mendapat umpan sindikasi untuk blog MSDN. Untuk mencegah tugas ditutup sebelum waktunya saat kode asinkron masih berjalan, dapatkan penangguhan.

  1. Di Penjelajah Solusi, ganti nama file yang dibuat secara otomatis, Class1.cs, menjadi BlogFeedBackgroundTask.cs.
  2. Di BlogFeedBackgroundTask.cs, ganti kode yang dibuat secara otomatis dengan kode rintisan untuk kelas BlogFeedBackgroundTask .
  3. Dalam implementasi metode Run, tambahkan kode untuk metode GetMSDNBlogFeed dan UpdateTile .
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// Added during quickstart
using Windows.ApplicationModel.Background;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
using Windows.Web.Syndication;

namespace BackgroundTasks
{
    public sealed class BlogFeedBackgroundTask  : IBackgroundTask
    {
        public async void Run( IBackgroundTaskInstance taskInstance )
        {
            // Get a deferral, to prevent the task from closing prematurely
            // while asynchronous code is still running.
            BackgroundTaskDeferral deferral = taskInstance.GetDeferral();

            // Download the feed.
            var feed = await GetMSDNBlogFeed();

            // Update the live tile with the feed items.
            UpdateTile( feed );

            // Inform the system that the task is finished.
            deferral.Complete();
        }

        private static async Task<SyndicationFeed> GetMSDNBlogFeed()
        {
            SyndicationFeed feed = null;

            try
            {
                // Create a syndication client that downloads the feed.  
                SyndicationClient client = new SyndicationClient();
                client.BypassCacheOnRetrieve = true;
                client.SetRequestHeader( customHeaderName, customHeaderValue );

                // Download the feed.
                feed = await client.RetrieveFeedAsync( new Uri( feedUrl ) );
            }
            catch( Exception ex )
            {
                Debug.WriteLine( ex.ToString() );
            }

            return feed;
        }

        private static void UpdateTile( SyndicationFeed feed )
        {
            // Create a tile update manager for the specified syndication feed.
            var updater = TileUpdateManager.CreateTileUpdaterForApplication();
            updater.EnableNotificationQueue( true );
            updater.Clear();

            // Keep track of the number feed items that get tile notifications.
            int itemCount = 0;

            // Create a tile notification for each feed item.
            foreach( var item in feed.Items )
            {
                XmlDocument tileXml = TileUpdateManager.GetTemplateContent( TileTemplateType.TileWide310x150Text03 );

                var title = item.Title;
                string titleText = title.Text == null ? String.Empty : title.Text;
                tileXml.GetElementsByTagName( textElementName )[0].InnerText = titleText;

                // Create a new tile notification.
                updater.Update( new TileNotification( tileXml ) );

                // Don't create more than 5 notifications.
                if( itemCount++ > 5 ) break;
            }
        }

        // Although most HTTP servers do not require User-Agent header, others will reject the request or return
        // a different response if this header is missing. Use SetRequestHeader() to add custom headers.
        static string customHeaderName = "User-Agent";
        static string customHeaderValue = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";

        static string textElementName = "text";
        static string feedUrl = @"http://blogs.msdn.com/b/MainFeed.aspx?Type=BlogsOnly";
    }
}

Menyiapkan manifes paket

Untuk menyiapkan manifes paket, buka dan tambahkan deklarasi tugas latar belakang baru. Atur titik masuk untuk tugas ke nama kelas, termasuk ruang namanya.

  1. Di Penjelajah Solusi, buka Package.appxmanifest.
  2. Klik atau ketuk tab Deklarasi .
  3. Di bawah Deklarasi yang Tersedia, pilih BackgroundTasks dan klik Tambahkan. Visual Studio menambahkan BackgroundTasks di bawah Deklarasi yang Didukung.
  4. Di bawah Tipe tugas yang didukung, pastikan Timer dicentang.
  5. Di bawah Pengaturan aplikasi, atur titik masuk ke BackgroundTasks.BlogFeedBackgroundTask.
  6. Klik atau ketuk tab UI Aplikasi .
  7. Atur Pemberitahuan layar Kunci ke Badge dan Tile Text.
  8. Atur jalur ke ikon piksel 24x24 di bidang logo Lencana . Penting Ikon ini harus menggunakan piksel monokrom dan transparan saja.
  9. Di bidang Logo kecil , atur jalur ke ikon piksel 30x30.
  10. Di bidang Logo lebar, atur jalur ke ikon 310x150 piksel.

Mendaftarkan tugas latar belakang

Buat BackgroundTaskBuilder untuk mendaftarkan tugas Anda.

Nota Mulai Windows 8.1, parameter pendaftaran tugas latar belakang divalidasi pada saat pendaftaran. Kesalahan dikembalikan jika salah satu parameter pendaftaran tidak valid. Aplikasi Anda harus dapat menangani skenario di mana pendaftaran tugas latar belakang gagal - misalnya, gunakan pernyataan bersyarat untuk memeriksa kesalahan pendaftaran dan kemudian mencoba kembali pendaftaran yang gagal menggunakan nilai parameter yang berbeda.  

Di halaman utama aplikasi Anda, tambahkan metode RegisterBackgroundTask dan panggil di penangan peristiwa OnNavigatedTo .

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Windows.ApplicationModel.Background;
using Windows.Data.Xml.Dom;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.Web.Syndication;

// The Blank Page item template is documented at https://go.microsoft.com/fwlink/p/?LinkID=234238

namespace ContosoApp
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.  The Parameter
        /// property is typically used to configure the page.</param>
        protected override void OnNavigatedTo( NavigationEventArgs e )
        {
            this.RegisterBackgroundTask();
        }


        private async void RegisterBackgroundTask()
        {
            var backgroundAccessStatus = await BackgroundExecutionManager.RequestAccessAsync();
            if( backgroundAccessStatus == BackgroundAccessStatus.AllowedSubjectToSystemPolicy ||
                backgroundAccessStatus == BackgroundAccessStatus.AlwaysAllowed )
            {
                foreach( var task in BackgroundTaskRegistration.AllTasks )
                {
                    if( task.Value.Name == taskName )
                    {
                        task.Value.Unregister( true );
                    }
                }

                BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
                taskBuilder.Name = taskName;
                taskBuilder.TaskEntryPoint = taskEntryPoint;
                taskBuilder.SetTrigger( new TimeTrigger( 15, false ) );
                var registration = taskBuilder.Register();
            }
        }

        private const string taskName = "BlogFeedBackgroundTask";
        private const string taskEntryPoint = "BackgroundTasks.BlogFeedBackgroundTask";
    }
}

Debug tugas latar belakang

Untuk men-debug tugas latar belakang, atur breakpoint di metode Jalankan tugas. Di toolbar Lokasi Debug , pilih tugas latar belakang Anda. Hal ini menyebabkan sistem untuk memanggil metode Run segera.

  1. Atur breakpoint dalam metode Jalankan tugas.
  2. Tekan F5 atau ketuk Debug > Start Debugging untuk menyebarkan dan menjalankan aplikasi.
  3. Setelah aplikasi diluncurkan, beralih kembali ke Visual Studio.
  4. Pastikan toolbar Lokasi Debug terlihat. Ada di menu View > Toolbars .
  5. Pada toolbar Lokasi Debug , klik dropdown Suspend dan pilih BlogFeedBackgroundTask.
  6. Visual Studio menangguhkan eksekusi di breakpoint.
  7. Tekan F5 atau ketuk Debug > Terus menjalankan aplikasi.
  8. Tekan Shift+F5 atau ketuk Debug > Stop Debugging untuk menghentikan debugging.
  9. Kembali ke petak aplikasi di layar Mulai. Setelah beberapa detik, notifikasi petak muncul di petak aplikasi Anda.