void Canvas_Draw()

in ExampleGallery/DpiExample.xaml.cs [226:278]


        void Canvas_Draw(CanvasControl sender, CanvasDrawEventArgs args)
        {
            mainDeviceResources.InitMessage();

            IAsyncAction pendingDrawTask = null;

            switch (CurrentOutput)
            {
                case OutputMode.CanvasControl:
                    DrawToOutput(mainDeviceResources, args.DrawingSession);
                    break;

                case OutputMode.CanvasImageBrush:
                    DrawViaImageBrush(args.DrawingSession);
                    break;

                case OutputMode.CanvasImageSource:
                    pendingDrawTask = RunOnUIThread(DrawToImageSource);
                    break;

                case OutputMode.CanvasSwapChain:
                    DrawToSwapChain();
                    break;

                case OutputMode.CanvasVirtualControl:
                    pendingDrawTask = RunOnUIThread(DrawToVirtualControl);
                    break;

                case OutputMode.CanvasVirtualImageSource:
                    pendingDrawTask = RunOnUIThread(DrawToVirtualImageSource);
                    break;
            }

            // Show or hide overlay controls to fit the current mode.
            imageControl.Visibility        = (CurrentOutput == OutputMode.CanvasImageSource)        ? Visibility.Visible : Visibility.Collapsed;
            swapChainPanel.Visibility      = (CurrentOutput == OutputMode.CanvasSwapChain)          ? Visibility.Visible : Visibility.Collapsed;
            virtualControl.Visibility      = (CurrentOutput == OutputMode.CanvasVirtualControl)     ? Visibility.Visible : Visibility.Collapsed;
            virtualImageControl.Visibility = (CurrentOutput == OutputMode.CanvasVirtualImageSource) ? Visibility.Visible : Visibility.Collapsed;
            animatedControl.Visibility     = (CurrentOutput == OutputMode.CanvasAnimatedControl)    ? Visibility.Visible : Visibility.Collapsed;
            animatedControl.Paused         = (CurrentOutput != OutputMode.CanvasAnimatedControl);

            // Update the info text.
            DispatchedHandler updateText = () => textBlock.Text = mainDeviceResources.GetFinalMessage();

            if (pendingDrawTask == null)
            {
                updateText();
            }
            else
            {
                pendingDrawTask.AsTask().ContinueWith(task => RunOnUIThread(updateText));
            }
        }