Memperbarui petak peta langsung dari tugas latar belakang

API penting

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

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

Membuat proyek tugas latar belakang

Untuk mengaktifkan petak peta langsung untuk aplikasi Anda, tambahkan proyek komponen Windows Runtime baru ke solusi Anda. Ini adalah rakitan 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 Proyek Baru.
  2. Dalam dialog Tambahkan Proyek Baru, pilih templat Komponen Runtime Windows di bagian Visual C# > Windows Universal Bahasa > Lain yang Diinstal>.
  3. Beri nama BackgroundTasks proyek dan klik atau ketuk OK. Microsoft Visual Studio menambahkan proyek baru ke solusi.
  4. Dalam proyek utama, tambahkan referensi ke proyek BackgroundTasks.

Menerapkan tugas latar belakang

Terapkan antarmuka IBackgroundTask untuk membuat kelas yang memperbarui petak peta langsung aplikasi Anda. Pekerjaan latar belakang Anda berjalan dalam metode Jalankan. Dalam hal ini, tugas mendapatkan 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 dihasilkan secara otomatis, Class1.cs, menjadi BlogFeedBackgroundTask.cs.
  2. Di BlogFeedBackgroundTask.cs, ganti kode yang dihasilkan secara otomatis dengan kode stub untuk kelas BlogFeedBackgroundTask .
  3. Dalam implementasi metode Jalankan, 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 namespace layanannya.

  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 Jenis tugas yang didukung, pastikan timer dicentang.
  5. Di bawah Pengaturan aplikasi, atur titik entri ke BackgroundTasks.BlogFeedBackgroundTask.
  6. Klik atau ketuk tab UI Aplikasi .
  7. Atur Pemberitahuan layar kunci ke Lencana dan Teks Petak.
  8. Atur jalur ke ikon piksel 24x24 di bidang Logo lencana . Penting Ikon ini harus menggunakan monokrom dan piksel transparan saja.
  9. Di bidang Logo kecil , atur jalur ke ikon 30x30 piksel.
  10. Di bidang Logo lebar , atur jalur ke ikon 310x150 piksel.

Daftarkan tugas latar belakang

Buat BackgroundTaskBuilder untuk mendaftarkan tugas Anda.

Catatan 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 bersyariah untuk memeriksa kesalahan pendaftaran lalu mencoba kembali pendaftaran yang gagal menggunakan nilai parameter yang berbeda.  

Di halaman utama aplikasi Anda, tambahkan metode RegisterBackgroundTask dan panggil di penanganan aktivitas 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";
    }
}

Men-debug tugas latar belakang

Untuk men-debug tugas latar belakang, atur titik henti dalam metode Jalankan tugas. Di toolbar Lokasi Debug , pilih tugas latar belakang Anda. Hal ini menyebabkan sistem segera memanggil metode Jalankan.

  1. Atur titik henti dalam metode Jalankan tugas.
  2. Tekan F5 atau ketuk Debug > Mulai Debugging untuk menyebarkan dan menjalankan aplikasi.
  3. Setelah aplikasi diluncurkan, beralih kembali ke Visual Studio.
  4. Pastikan toolbar Lokasi Debug terlihat. Ini ada di menu Bilah Alat Tampilan>.
  5. Pada toolbar Lokasi Debug , klik menu dropdown Tangguhkan dan pilih BlogFeedBackgroundTask.
  6. Visual Studio menangguhkan eksekusi di titik henti.
  7. Tekan F5 atau ketuk Debug > Lanjutkan untuk terus menjalankan aplikasi.
  8. Tekan Shift+F5 atau ketuk Debug > Hentikan Penelusuran Kesalahan untuk menghentikan penelusuran kesalahan.
  9. Kembali ke petak peta aplikasi di layar Mulai. Setelah beberapa detik, pemberitahuan petak peta muncul di petak peta aplikasi Anda.