2013-02-07 66 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()來確定它是否開始備份。哪一個能讓你獲得一個新的項目參考,沖洗並重復。

相關問題