C# 如何使用Win2D模拟DeviceLost事件?

C# 如何使用Win2D模拟DeviceLost事件?,c#,win-universal-app,win2d,C#,Win Universal App,Win2d,我在UWP应用程序中有一个CanvasControl,我注意到当我离开曲面一段时间后,它会自动进入睡眠状态,CanvasControl在恢复后不再工作。以前绘制的位图现在为空 我尝试在VisualStudio2015中模拟挂起/恢复,但这似乎没有引起问题。恢复正常 我觉得这与CanvasDevice.DeviceLost事件有关,尽管我使用CanvasControl.CreateResources事件来管理它,但我找不到一种方法来轻松测试它 我尝试了以下方法: // This throws an

我在UWP应用程序中有一个
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文档中。谢谢你,西蒙。