Я использую ссылки Microsoft.DirectX и Microsoft.DirectX.Direct3D для рисования в моей форме. Пока я запускаю программу, и пользователь нажимает CTRL ALT DEL в Windows XP и вызывает форму «Безопасность 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, то нет смысла пытаться перезагрузить устройство.
Что я могу сделать, чтобы перезагрузить устройство и продолжить рисование в моей форме?