Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga / Notatka
Kafelki życia to funkcja systemu Windows 10, która nie jest obsługiwana w nowszych wersjach systemu Windows. W przypadku nowych aplikacji zalecamy przestrzeganie bieżących wskazówek dotyczących ikon aplikacji.
Użyj zadania w tle, aby zaktualizować dynamiczny kafelek aplikacji nową zawartością.
ważne interfejsy API
Utwórz projekt zadania w tle
Aby włączyć dynamiczny kafelek dla aplikacji, dodaj do rozwiązania nowy projekt składnika Środowiska uruchomieniowego systemu Windows. Jest to oddzielny zestaw, który system operacyjny ładuje i uruchamia w tle podczas instalowania aplikacji przez użytkownika.
- W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy rozwiązanie, kliknij Dodaj, a następnie kliknij nowy projekt.
- W oknie dialogowym Dodawanie nowego projektu, wybierz szablon Windows Runtime Component w sekcji Zainstalowane > Inne języki > Visual C# > Windows uniwersalny.
- Nadaj projektowi nazwę BackgroundTasks i kliknij lub naciśnij OK. Program Microsoft Visual Studio dodaje nowy projekt do rozwiązania.
- W głównym projekcie dodaj odwołanie do projektu BackgroundTasks.
Wdrażaj zadanie w tle
Zaimplementuj interfejs IBackgroundTask, aby utworzyć klasę, która aktualizuje dynamiczny kafelek aplikacji. Twoja praca w tle jest wykonywana w metodzie Run. W takim przypadku zadanie pobiera kanał syndykacji dla blogów MSDN. Aby zapobiec przedwczesnemu zamykaniu zadania, gdy kod asynchroniczny jest nadal uruchomiony, pobierz odroczenie.
- W Eksploratorze rozwiązań zmień nazwę automatycznie wygenerowanego pliku Class1.cs na BlogFeedBackgroundTask.cs.
- W BlogFeedBackgroundTask.cs zastąp automatycznie wygenerowany kod kodem wycinkowym dla klasy BlogFeedBackgroundTask.
- W implementacji metody Run dodaj kod dla metod GetMSDNBlogFeed i 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";
}
}
Konfigurowanie manifestu pakietu
Aby skonfigurować manifest pakietu, otwórz go i dodaj nową deklarację zadania w tle. Ustaw punkt wejścia zadania na nazwę klasy, w tym jej przestrzeń nazw.
- W Eksploratorze rozwiązań otwórz plik Package.appxmanifest.
- Kliknij lub naciśnij kartę Deklaracje .
- W obszarze Dostępne deklaracjewybierz Zadania w tle i kliknij Dodaj. Program Visual Studio dodaje BackgroundTasks w obszarze Obsługiwane deklaracje.
- W obszarze Obsługiwane typy zadańupewnij się, że Czasomierz jest oznaczone.
- W obszarze Ustawienia aplikacjinależy ustawić punkt wejścia na BackgroundTasks.BlogFeedBackgroundTask.
- Kliknij lub naciśnij zakładkę interfejsu użytkownika aplikacji .
- Ustaw powiadomienia ekranu blokady na tekst znaczka i kafelka.
- Ustaw ścieżkę do ikony o rozmiarze 24x24 pikseli w polu logo znaczka . Ważne Ta ikona musi używać tylko monochromatycznych i przezroczystych pikseli.
- W polu Małe logo ustaw ścieżkę do ikony o rozdzielczości 30x30 pikseli.
- W polu logo Szerokie ustaw ścieżkę do ikony o rozmiarze 310x150 pikseli.
Zarejestruj zadanie w tle
Utwórz BackgroundTaskBuilder, by zarejestrować swoje zadanie.
Uwaga Począwszy od systemu Windows 8.1, parametry rejestracji zadań w tle są weryfikowane w czasie rejestracji. Zwracany jest błąd, jeśli którykolwiek z parametrów rejestracji jest nieprawidłowy. Aplikacja musi być w stanie obsłużyć scenariusze, w których rejestracja zadań w tle kończy się niepowodzeniem — na przykład użyj instrukcji warunkowej, aby sprawdzić błędy rejestracji, a następnie ponowić próbę nieudanej rejestracji przy użyciu różnych wartości parametrów.
Na głównej stronie aplikacji dodaj metodę RegisterBackgroundTask i wywołaj ją w obsłudze zdarzenia 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";
}
}
Debugowanie zadania w tle
Aby debugować zadanie w tle, ustaw punkt przerwania w metodzie Run zadania. Na pasku narzędzi lokalizacji debugowania wybierz zadanie w tle. Powoduje to natychmiastowe wywołanie metody Run przez system.
- Ustaw punkt przerwania w metodzie Run zadania.
- Naciśnij F5 lub naciśnij pozycję Debugowanie > Rozpocznij debugowanie, aby wdrożyć i uruchomić aplikację.
- Po uruchomieniu aplikacji wróć do programu Visual Studio.
- Upewnij się, że pasek narzędzi Lokalizacja debugowania jest widoczny. Znajduje się on w menu View > Paski narzędzi.
- Na pasku narzędzi lokalizacja debugowania
kliknij listę rozwijaną Wstrzymaj i wybierz pozycję blog FeedBackgroundTask . - Program Visual Studio zawiesza wykonywanie w punkcie przerwania.
- Naciśnij F5 lub naciśnij pozycję Debuguj > Kontynuuj, aby kontynuować uruchamianie aplikacji.
- Naciśnij Shift+F5 lub naciśnij pozycję Debugowanie > Zatrzymaj debugowanie, aby zatrzymać debugowanie.
- Wróć do kafelka aplikacji na ekranie startowym. Po kilku sekundach powiadomienia na kafelku pojawiają się na kafelku aplikacji.