Bagikan melalui


Memperbarui petak peta langsung dari tugas latar belakang

Catatan

Petak Peta Kehidupan adalah fitur Windows 10 yang tidak didukung pada versi Windows yang lebih baru. Untuk aplikasi baru, kami sarankan Anda mengikuti panduan saat ini untuk ikon Aplikasi.

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

API penting

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 Terinstal > >.
  3. Beri nama BackgroundTasks proyek 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 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 menutup 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 entri 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 Latar BelakangTasks 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 Peta.
  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 piksel 30x30.
  10. Di bidang Logo lebar, atur jalur ke ikon piksel 310x150.

Daftarkan tugas latar belakang

Buat BackgroundTaskBuilder untuk mendaftarkan tugas Anda.

Catatan Mulai dari 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. 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 pada 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.