Attività in background e trigger personalizzati
Le attività in background sono un metodo su Windows 10 per l'esecuzione del codice in background. Fanno parte della piattaforma applicativa standard e forniscono essenzialmente a un'app la possibilità di registrarsi per un evento di sistema (trigger) e quando si verifica tale evento esegue un blocco di codice predefinito in background. I trigger di sistema includono eventi come modifiche alla connettività di rete o al fuso orario di sistema.
In alcune circostanze, i trigger di sistema forniti non sono sufficienti per gestire gli scenari dei partner. A partire da Windows 10 versione 1803, per offrire ai partner maggiore flessibilità e consentire l'uso di attività in background per più circostanze, i partner possono creare trigger personalizzati per cui le app possono registrarsi. I trigger personalizzati vengono definiti all'interno di un driver di dispositivo e possono essere usati per generare eventi per qualsiasi condizione hardware desiderata. Quando viene generato il trigger personalizzato, l'app può eseguire un'attività in background esattamente come il modello di app standard.
Implementazione di un trigger personalizzato
Esistono due passaggi per implementare un trigger personalizzato. In particolare, il trigger deve essere definito e generato all'interno di un driver di dispositivo o di un servizio di sistema e deve essere creata un'app con un'attività in background.
Creazione del trigger personalizzato
Un trigger personalizzato viene definito e generato all'interno di un servizio nativo o di un driver di dispositivo tramite la funzione RtlRaiseCustomSystemEventTrigger . Può quindi essere registrato per da un'app universale e usato per avviare un'attività in background in modo relativamente identico a quello di un trigger definito dal sistema.
L'estratto di codice seguente illustra come generare un trigger personalizzato.
#define GUID_MY_CUSTOMSYSTEMEVENTTRIGGERID L"{9118718B-FF80-4AFE-BAF1-D88A4525F3AB}"
CUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG triggerConfig;
CUSTOM_SYSTEM_EVENT_TRIGGER_INIT(&triggerConfig,
GUID_MY_CUSTOMSYSTEMEVENTTRIGGERID);
NTSTATUS status = RtlRaiseCustomSystemEventTrigger(&triggerConfig);
All'interno dell'esempio di codice precedente, il GUID passato come parametro alla funzione RtlRaiseCustomSystemEventTrigger definisce l'identificatore del trigger per cui verrà eseguita la registrazione dell'app durante la creazione dell'attività in background. Questo identificatore deve essere univoco.
Creazione di un'attività in background
La creazione di un'attività in background e la registrazione per un trigger personalizzato è molto simile al processo usato per le attività in background che funzionano con i trigger di sistema standard.
Per iniziare, creare un'app UWP.
Definire l'attività in background nel file manifesto dell'app, come illustrato nell'esempio seguente. Si noti che l'attributo Type dell'elemento Task è impostato su
"systemEvent"
<Applications> <Application Id="MyBackgroundTaskSample.App" Executable="$targetnametoken$.exe" EntryPoint=" MyBackgroundTaskSample.App"> <Extensions> <Extension Category="windows.backgroundTasks" EntryPoint="MyBackgroundTask.SampleBackgroundTask"> <BackgroundTasks> <Task Type="systemEvent" /> </BackgroundTasks> </Extension> </Extensions> </Application> </Applications>
Registrare l'app per restare in ascolto del trigger personalizzato creato come illustrato nell'estratto di codice seguente. Si noti che la stringa usata per creare un'istanza di CustomSystemEventTrigger deve corrispondere al GUID usato durante la creazione del trigger nel driver di dispositivo o nel servizio nativo.
public void InitBackgroundTask() { // Create a new background task builder. BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder(); // Create a new CustomSystemEvent trigger. var myTrigger = new CustomSystemEventTrigger( "{9118718B-FF80-4AFE-BAF1-D88A4525F3AB}", //Trigger Identifier CustomSystemEventTriggerRecurrence.Once); //OneShot // Associate the CustomSystemEvent trigger with the background task builder. taskBuilder.SetTrigger(myTrigger); // Specify the background task to run when the trigger fires. taskBuilder.TaskEntryPoint = MyBackgroundTask.SampleBackgroundTask; // Name the background task. taskBuilder.Name = "fabrikam.audio-jack.connected Task"; // Register the background task. BackgroundTaskRegistration taskRegistration = taskBuilder.Register(); // Associate completed event handler with the new background task. taskRegistration.Completed += new BackgroundTaskCompletedEventHandler(OnCompleted); }
Creare l'attività in background come illustrato nell'estratto di codice seguente.
namespace MyBackgroundTask { public sealed class SampleBackgroundTask : IBackgroundTask { // Called by the system when it's time to run our task public void Run(IBackgroundTaskInstance instance) { DoWork(); } } }
Per altre indicazioni sulla creazione, la configurazione e l'uso di attività e trigger in background, vedere Guida introduttiva: Creare e registrare un'attività in background.