2013-02-07 75 views
1

我试图做这样的事情:WaitForExit过程结束时,应用程序失去焦点

var process = Process.Start("MyGame.exe"); 
process.WaitForExit(); 
MessageBox.Show("Game is closed"); 

的事情是,当我Alt + Tab游戏我的应用程序认为游戏已经退出,然后显示该消息。在消息出现之前,我想完全等待程序关闭。

有没有办法解决这个问题?

+0

这个问题是否出现*仅用于特定的mygame.exe,或者您是否看到它一般? – EricLaw

+0

只有mygame.exe – phadaphunk

+1

你确定MyGame.exe不是真的退出吗?它可能会产生一个单独的可执行文件或其他东西。您可以通过观察通过这些转换的PID来验证这一点。 – itsme86

回答

2

Alt +从远离使用DirectX的程序跳转会生成“设备丢失”错误代码。在this MSDN page中描述:

通过设计,可以导致设备丢失的全套方案都未指定。一些典型的例子包括失去焦点,,例如当用户按下ALT + TAB或系统对话框被初始化时。由于电源管理事件,或其他应用程序假定全屏操作时,设备也可能会丢失。另外,来自IDirect3DDevice9 :: Reset的任何故障都会使设备进入丢失状态。

这个错误在游戏逻辑中可能很难处理,因为它在游戏循环的核心中发挥作用。显然,你的游戏程序员发现了一个非常有效的解决方案:他只是重新启动程序。这会让程序状态得到恢复,并在游戏重新获得显示时立即让游戏继续运行。

可能的解决方法是在WaitForExit()完成后休眠一段时间,然后使用Process.GetProcessesByName()来确定它是否开始备份。哪一个能让你获得一个新的项目参考,冲洗并重复。

相关问题