Formation
Module
Découvrez comment gérer les charges de travail relatives aux incidents à l’aide de files d’attente Microsoft Dynamics 365 Customer Service.
Ce navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour bénéficier des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
Une fois qu’un thread quitte sa boucle d’événements, il doit arrêter son DispatcherQueue. Cela déclenche les événements ShutdownStarting et ShutdownCompleted et vide tous les éléments mis en file d’attente finals avant de désactiver la mise en file d’attente supplémentaire.
Lorsque vous appelez DispatcherQueueController.ShutdownQueueAsync ou DispatcherQueueController.ShutdownQueue, l’ordre des événements déclenchés est le suivant :
Les événements sont séparés en catégories d’application/framework afin que l’arrêt ordonné puisse être atteint. Autrement dit, en levant explicitement l’arrêt de l’application avant les événements d’arrêt du framework, il n’existe aucun danger qu’un composant de framework soit dans un état inutilisable lorsque l’application se décompose.
namespace winrt
{
using namespace Microsoft::UI::Dispatching;
}
// App runs its own custom message loop.
void RunCustomMessageLoop()
{
// Create a DispatcherQueue.
auto dispatcherQueueController{winrt::DispatcherQueueController::CreateOnCurrentThread()};
// Run a custom message loop. Runs until the message loop owner decides to stop.
MSG msg;
while (GetMessage(&msg, nullptr, 0, 0))
{
if (!ContentPreTranslateMessage(&msg))
{
TranslateMesasge(&msg);
DispatchMessage(&msg);
}
}
// Run down the DispatcherQueue. This single call also runs down the system DispatcherQueue
// if one was created via EnsureSystemDispatcherQueue:
// 1. Raises DispatcherQueue.ShutdownStarting event.
// 2. Drains remaining items in the DispatcherQueue, waits for deferrals.
// 3. Raises DispatcherQueue.FrameworkShutdownStarting event.
// 4. Drains remaining items in the DispatcherQueue, waits for deferrals.
// 5. Disables further enqueuing.
// 6. Raises the DispatcherQueue.FrameworkShutdownCompleted event.
// 7. Raises the DispatcherQueue.ShutdownCompleted event.
dispatcherQueueController.ShutdownQueue();
}
DispatcherQueue prend en charge les boucles de message personnalisées. Toutefois, pour les applications simples qui n’ont pas besoin de personnalisation, nous fournissons des implémentations par défaut. Cela supprime une charge des développeurs et permet de garantir un comportement cohérent.
namespace winrt
{
using namespace Microsoft::UI::Dispatching;
}
// Simple app; doesn't need a custom message loop.
void RunMessageLoop()
{
// Create a DispatcherQueue.
auto dispatcherQueueController{winrt::DispatcherQueueController::CreateOnCurrentThread()};
// Runs a message loop until a call to DispatcherQueue.EnqueueEventLoopExit or PostQuitMessage.
dispatcherQueueController.DispatcherQueue().RunEventLoop();
// Run down the DispatcherQueue.
dispatcherQueueController.ShutdownQueue();
}
// May be called while receiving a message.
void RunNestedLoop(winrt::DispatcherQueue dispatcherQueue)
{
// Runs a message loop until a call to DispatcherQueue.EnqueueEventLoopExit or PostQuitMessage.
dispatcherQueue.RunEventLoop();
}
// Called to break out of the message loop, returning from the RunEventLoop call lower down the
// stack.
void EndMessageLoop(winrt::DispatcherQueue dispatcherQueue)
{
// Alternatively, calling Win32's PostQuitMessage has the same effect.
dispatcherQueue.EnqueueEventLoopExit();
}
Certains composants du Kit de développement logiciel (SDK) d’application Windows (par exemple, MicaController) dépendent des composants système qui nécessitent à leur tour un système DispatcherQueue (Windows.System.DispatcherQueue) s’exécutant sur le thread.
Dans ce cas, le composant doté d’une dépendance system DispatcherQueue appelle la méthode EnsureSystemDispatcherQueue , ce qui libère votre application de la gestion d’un système DispatcherQueue.
Avec cette méthode appelée, le kit de développement logiciel (SDK) d’application Windows DispatcherQueue gère automatiquement la durée de vie du système DispatcherQueue, en arrêtant le dispatcherQueue système en même temps que le répartiteur du SDK d’application Windows. Les composants peuvent s’appuyer sur les événements d’arrêt du kit SDK d’application Windows et du système DispatcherQueue afin de s’assurer qu’ils effectuent un nettoyage approprié après la sortie de la boucle de message.
namespace winrt
{
using namespace Microsoft::UI::Composition::SystemBackdrops;
using namespace Microsoft::UI::Dispatching;
}
// The Windows App SDK component calls this during its startup.
void MicaControllerInitialize(winrt::DispatcherQueue dispatcherQueue)
{
dispatcherQueue.EnsureSystemDispatcherQueue();
// If the component needs the system DispatcherQueue explicitly, it can now grab it off the thread.
winrt::Windows::System::DispatcherQueue systemDispatcherQueue =
winrt::Windows::System::DispatcherQueue::GetForCurrentThread();
}
void AppInitialize()
{
// App doesn't need to concern itself with the system DispatcherQueue dependency.
auto micaController = winrt::MicaController();
}
La classe AppWindow a des fonctionnalités qui l’intègrent à DispatcherQueue, afin que les objets AppWindow puissent être détruits automatiquement lorsque la méthode DispatcherQueueController.ShutdownQueueAsync ou DispatcherQueueController.ShutdownQueue.ShutdownQueue Est appelée.
Il existe également une propriété d’AppWindow qui permet aux appelants de récupérer le DispatcherQueue associé à AppWindow ; en l’alignant avec d’autres objets dans les espaces de noms Composition et Input.
AppWindow a besoin de votre opt-in explicite pour être conscient de dispatcherQueue.
namespace winrt
{
using namespace Microsoft::UI::Dispatching;
using namespace Microsoft::UI::Windowing;
}
void Main()
{
// Create a Windows App SDK DispatcherQueue.
auto dispatcherQueueController{winrt::DispatcherQueueController::CreateOnCurrentThread()};
var appWindow = AppWindow.Create(nullptr, 0, dispatcherQueueController.DispatcherQueue());
// Since we associated the DispatcherQueue above with the AppWindow, we're able to retreive it
// as a property. If we were to not associate a dispatcher, this property would be null.
ASSERT(appWindow.DispatcherQueue() == dispatcherQueueController.DispatcherQueue());
// Runs a message loop until a call to DispatcherQueue.EnqueueEventLoopExit or PostQuitMessage.
dispatcherQueueController.DispatcherQueue().RunEventLoop();
// Rundown the Windows App SDK DispatcherQueue. While this call is in progress, the AppWindow.Destoyed
// event will be raised since the AppWindow instance is associated with the DispatcherQueue.
dispatcherQueueController.ShutdownQueue();
}
Commentaires sur Windows developer
Windows developer est un projet open source. Sélectionnez un lien pour fournir des commentaires :
Formation
Module
Découvrez comment gérer les charges de travail relatives aux incidents à l’aide de files d’attente Microsoft Dynamics 365 Customer Service.
Documentation
Migration des fonctionnalités de thread - Windows apps
Cette rubrique explique comment migrer le code de thread dans une application plateforme Windows universelle (UWP) vers le Kit de développement logiciel (SDK) d’application Windows.
Afficher les objets d’interface utilisateur WinRT qui dépendent de CoreWindow - Windows apps
Vous pouvez utiliser un certain nombre de sélecteurs, fenêtres contextuelles, boîtes de dialogue et autres objets Windows Runtime (WinRT) dans votre application de bureau en ajoutant quelques lignes de code d’interopérabilité.
Espaces de noms du Kit de développement logiciel (SDK) d’application Windows - Windows App SDK
Migration de l’interface utilisateur (y compris WinUI 3) - Windows apps
Cette rubrique explique comment migrer le code de votre interface utilisateur, y compris la migration vers [WinUI 3](.. /.. /.. /winui/index.md).