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));
}
}