我正在使用Microsoft.DirectX和Microsoft.DirectX.Direct3D引用在我的表单上做一些绘图。当我运行该程序并且用户在Windows XP中按下CTRL ALT DEL并显示“Windows安全”表单时,返回到表单时,抛出了一个DeviceLostException,当尝试处理此异常时似乎没有办法把它拿回来。
我对此事做了一些研究,并尝试了几种编码解决方案。
try
{
_d3ddevice.Present();
}
catch
{
DeviceLost = true;
}
if (DeviceLost)
{
AttemptRecovery();
}
this.Invalidate();
ReadKeyboard();
base.OnPaint(e);
}
private void AttemptRecovery()
{
try
{
_d3ddevice.TestCooperativeLevel();
}
catch (DeviceLostException)
{
Application.Exit();
}
catch (DeviceNotResetException)
{
try
{
_d3ddevice.Reset(_params);
DeviceLost = false;
InitGraphics();
CameraPositioning();
VertexDeclaration();
IndicesDeclaration();
}
catch (DeviceLostException)
{
}
}
}
当程序调用TestCooperativeLevel()时,它会在线说如果它再次捕获DeviceLostException,则试图重置设备是没有意义的。
如何重置设备并继续在表单中绘图?
答案 0 :(得分:3)
4分中有2件事:
Reset
方法。