Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Bakgrundsuppgifter används mycket i UWP-appar för att utföra jobb när en viss utlösare anropas på datorn. Eftersom dessa inte kräver att någon tjänst körs och lyssnar efter utlösarna, är de mycket strömeffektiva. När du migrerar UWP-appar till WinUI 3 och andra skrivbordsappar som använder Windows App SDK kan utvecklare kräva stöd för att implementera bakgrundsuppgifter på plattformen.
Bakgrundsaktiviteter som erbjuds i UWP-appmodellen kan antingen vara out-of-proc eller in-proc. Den här artikeln beskriver migreringsstrategin för var och en av dessa typer när du flyttar till BackgroundTaskBuilder-API :er i Windows App SDK.
Bakgrundsaktiviteter som inte är av typen proc
När det gäller bakgrundsuppgifter i UWP skrivs dessa som en Windows Runtime-komponent (WinRT) och komponenten anges som TaskEntryPoint på BackgroundTaskBuilder under registreringsprocessen. När du migrerar till Windows App SDK kan utvecklare behålla den här as-is och paketera WinRT-komponenten tillsammans med skrivbordsprojektet. I det här fallet startar mäklarinfrastrukturen backgroundtaskhost processen när utlösaren anropas, och WinRT-komponentens bakgrundsaktivitet skulle köras i processen. I den här metoden körs bakgrundsaktiviteten i en IL-process (Low Integrity Level) (backgroundtaskhost.exe) medan huvudprojektet för skrivbordet körs i en medelhög IL-process.
Om programmet behöver köra en bakgrundsaktivitet i en medium IL-process måste COM-komponenten med fullt förtroende användas för bakgrundsaktiviteter. I det scenariot måste utvecklare använda Windows App SDK BackgroundTaskBuilder för att registrera komponenten COM med fullständiga rättigheter. Observera att BackgroundTaskBuilder-API :et från namnområdet Windows.ApplicationModel.Background utlöser undantag vid registrering av några av utlösarna.
Ett fullständigt Exempel på registrering av bakgrundsaktiviteter i WinUI 3 finns på GitHub-.
Mer information om implementeringen finns här. Den enda nödvändiga ändringen är att ersätta API:et WinRT BackgroundTaskBuilder med Windows App SDK API Microsoft.Windows.ApplicationModel.Background.BackgroundTaskBuilder.
Bakgrundsaktiviteter för in-proc
För in-proc-bakgrundsaktiviteter i UWP implementeras rutiner för bakgrundsaktiviteter i återanropet OnBackgroundActivated som körs som en del av förgrundsprocessen. Detta är inte möjligt i ett WinUI 3-program eftersom återanropen OnBackgroundActivated inte är tillgängliga. Programmet måste flytta implementeringarna av bakgrundsaktiviteten till fullständiga betrodda COM-uppgifter enligt beskrivningen ovan och definiera COM-servern i paketmanifestet för att hantera COM-aktiveringen av uppgiften. När händelsen inträffar sker COM-aktivering på den COM Coclass som har registrerats för denna händelse.
Ett fullständigt Exempel på registrering av bakgrundsaktiviteter i WinUI 3 finns på GitHub-.
Mer information om implementeringen finns här. Den enda ändringen skulle vara att ersätta API:et WinRT BackgroundTaskBuilder med Api:erna för Windows App SDK i Microsoft.Windows.ApplicationModel.Background.BackgroundTaskBuilder.
Windows App SDK BackgroundTaskBuilder API
Det här Windows App SDK BackgroundTaskBuilder-API:et har skapats för att stödja implementeringar av COM-bakgrundsaktivitet med fullständigt förtroende i WinUI 3 och andra skrivbordsprogram som använder Windows App SDK, eftersom WinRT API kastar undantag under registreringen förutom för några få utlösare.
Följande kod visar hur du registrerar bakgrundsaktivitet med hjälp av Windows App SDK BackgroundTaskBuilder-API :er:
//Using Windows App SDK API for BackgroundTaskBuilder
winrt::Microsoft::Windows::ApplicationModel::Background::BackgroundTaskBuilder builder;
SystemTrigger trigger = SystemTrigger(SystemTriggerType::TimeZoneChange, false);
auto backgroundTrigger = trigger.as<IBackgroundTrigger>();
builder.SetTrigger(backgroundTrigger);
builder.AddCondition(SystemCondition(SystemConditionType::InternetAvailable));
builder.SetTaskEntryPointClsid(classGuid);
builder.Register();
Följande är motsvarande C#-kod:
// Using Windows App SDK API for BackgroundTaskBuilder
var builder = new Microsoft.Windows.ApplicationModel.Background.BackgroundTaskBuilder();
var trigger = new SystemTrigger(SystemTriggerType.TimeZoneChange, false);
builder.SetTrigger(trigger);
builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
builder.SetTaskEntryPointClsid(classGuid);
builder.Register();
Om du vill använda det här API:et lägger du till taggen nedan i projektfilen för att aktivera Windows App SDK-bakgrundsuppgifter:
<WindowsAppSDKBackgroundTask>true</WindowsAppSDKBackgroundTask>
I manifestfilen är EntryPoint för BackgroundTask också inställt på Microsoft.Windows.ApplicationModel.Background.UniversalBGTask.Task:
<Extension Category="windows.backgroundTasks" EntryPoint="Microsoft.Windows.ApplicationModel.Background.UniversalBGTask.Task">
<BackgroundTasks>
<Task Type="general"/>
</BackgroundTasks>
</Extension>
För C#-program bör en ActivatableClass-registrering också läggas till i manifestfilen:
<Extension Category="windows.activatableClass.inProcessServer">
<InProcessServer>
<Path>Microsoft.Windows.ApplicationModel.Background.UniversalBGTask.dll</Path>
<ActivatableClass ActivatableClassId="Microsoft.Windows.ApplicationModel.Background.UniversalBGTask.Task" ThreadingModel="both"/>
</InProcessServer>
</Extension>
Använda TaskScheduler för migrering av bakgrundsaktiviteter
Schemaläggaren hjälper skrivbordsappar att uppnå samma funktioner som tillhandahålls av BackgroundTaskBuilder i UWP-appar. Mer information om implementeringar med Hjälp av TaskScheduler finns här.
ApplicationTrigger-användning i Windows App SDK-program
ApplicationTrigger stöds i UWP-program på grund av scenariot för livslängdshantering där programprocessen kan pausas. Det här scenariot inträffar inte för WinUI och andra Windows App SDK-skrivbordsprogram, så den här utlösaren stöds inte i WinUI-program. All logik som är relaterad till ApplicationTrigger måste skrivas om för att köras genom att starta en annan process eller genom att köra i en trådpoolstråd. Mer information finns i CreateThread och CreateProcess.
Relaterat innehåll
Windows developer