我在UWP应用程序中有一个CanvasControl
,我注意到当我单独离开Surface一段时间后它会自动进入睡眠状态,恢复后CanvasControl
不再有效。以前绘制的位图现在是空白的。
我尝试在Visual Studio 2015中模拟Suspend / Resume,但这似乎不会导致问题。它恢复正常。
我觉得它与CanvasDevice.DeviceLost
事件有关,虽然我通过CanvasControl.CreateResources
事件管理它,但我找不到轻松测试它的方法。
我尝试了以下内容:
// 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();
有没有办法以编程方式调用CanvasDevice.DeviceLost
事件?我该如何伪造它?
答案 0 :(得分:6)
使用API触发设备丢失事件是不可能的,但您可以使用命令行工具:
DXCap.exe -forcetdr
您需要的DXCap版本是适用于Windows 10的图形工具包的一部分,适用于Win10版本10586或更高版本: https://msdn.microsoft.com/en-us/library/mt125501.aspx#InstallGraphicsTools
安装VSGD后,您可以在windows \ system32目录中找到DXCap。
不幸的是,看起来这个选项尚未记录,但是来自命令行:
-forcetdr Don't capture or replay, but simply force a GPU Timeout
Detection and Recovery event, then exit.
答案 1 :(得分:0)
@Simon所描述的内容将在页面底部记录:
Handle device removed scenarios in Direct3D 11
直接引用上面的链接:
Visual Studio的Developer Command Prompt支持命令行工具'dxcap',用于与Visual Studio Graphics Diagnostics相关的Direct3D事件捕获和回放。您可以在应用程序运行时使用命令行选项“-forcetdr”,这将强制执行GPU超时检测和恢复事件,从而触发DXGI_ERROR_DEVICE_REMOVED并允许您测试错误处理代码。