C# 如何使用Win2D模拟DeviceLost事件?
我在UWP应用程序中有一个C# 如何使用Win2D模拟DeviceLost事件?,c#,win-universal-app,win2d,C#,Win Universal App,Win2d,我在UWP应用程序中有一个CanvasControl,我注意到当我离开曲面一段时间后,它会自动进入睡眠状态,CanvasControl在恢复后不再工作。以前绘制的位图现在为空 我尝试在VisualStudio2015中模拟挂起/恢复,但这似乎没有引起问题。恢复正常 我觉得这与CanvasDevice.DeviceLost事件有关,尽管我使用CanvasControl.CreateResources事件来管理它,但我找不到一种方法来轻松测试它 我尝试了以下方法: // This throws an
CanvasControl
,我注意到当我离开曲面一段时间后,它会自动进入睡眠状态,CanvasControl
在恢复后不再工作。以前绘制的位图现在为空
我尝试在VisualStudio2015中模拟挂起/恢复,但这似乎没有引起问题。恢复正常
我觉得这与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
事件?如何伪造它?不可能用API触发设备丢失事件,但您可以使用一个命令行工具:
DXCap.exe -forcetdr
您需要的DXCap版本是Win10 build 10586或更高版本的Windows 10图形工具软件包的一部分:
安装VSGD后,您可以在windows\system32目录中找到DXCap
不幸的是,该选项似乎(尚未)记录在案,而是来自命令行:
-forcetdr Don't capture or replay, but simply force a GPU Timeout
Detection and Recovery event, then exit.
@Simon所描述的内容记录在页面底部: 直接引用上述链接: Visual Studio的开发者命令提示符支持命令行工具“dxcap”,用于捕获和回放与Visual Studio图形诊断相关的Direct3D事件。您可以在应用程序运行时使用命令行选项“-forcetdr”,这将强制执行GPU超时检测和恢复事件,从而触发DXGI_ERROR_DEVICE_REMOVED,并允许您测试错误处理代码
杰出的我立刻发现了那只虫子!这可能是一个重要的建议,也许您应该将其附加到Win2D文档中。谢谢你,西蒙。