I have a CanvasControl
in a UWP app and I've noticed when I leave my Surface alone for a while and it goes to sleep automatically, the CanvasControl
no longer works after resuming. The previously drawn bitmap is now blank.
I tried to simulate Suspend/Resume in Visual Studio 2015, but that doesn't seem to cause a problem. It resumes fine.
I have a feeling it has to do with the CanvasDevice.DeviceLost
event, and although I manage that with the CanvasControl.CreateResources
event, I can't find a way to easily test it.
I tried the following:
// This throws an exception. Not allowed to do this.
myCanvas.Device.RaiseDeviceLost();
// and this doesn't report a device lost, but myCanvas becomes unusable.
myCanvas.Device.Dispose();
Is there a way to programmatically invoke a CanvasDevice.DeviceLost
event? How can I fake it?
It's not possible to trigger a device lost event with an API, but there is a command line tool you can use:
DXCap.exe -forcetdr
The version of DXCap you need is part of the Graphics Tools for Windows 10 package, for Win10 build 10586 or later: https://msdn.microsoft.com/en-us/library/mt125501.aspx#InstallGraphicsTools
After installing the VSGD, you can find DXCap in the windows\system32 directory.
Unfortunately it looks like this option is not (yet) documented, but from the command line:
-forcetdr Don't capture or replay, but simply force a GPU Timeout
Detection and Recovery event, then exit.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With