私はこのようなことをしようとしています:
var process = Process.Start("MyGame.exe");
process.WaitForExit();
MessageBox.Show("Game is closed");
私Alt + Tab
がゲームをプレイすると、アプリケーションはゲームが終了したと判断し、メッセージを表示します。メッセージが表示される前に、プログラムがシャットダウンされるのを完全に待ちたいです。
これを回避する方法はありますか?
DirectX を使用するプログラムから Alt キーを押しながら Tab キーを押すと、「デバイスが失われました」というエラー コードが生成されます。このMSDNページで説明されています:
設計上、デバイスが失われる可能性のあるシナリオの完全なセットは指定されていません。いくつかの典型的な例には、ユーザーが Alt + Tab キーを押したときやシステム ダイアログが初期化されたときなど、フォーカスの喪失が含まれます。また、電源管理イベントが原因で、または別のアプリケーションがフルスクリーン操作を想定している場合にも、デバイスが失われる可能性があります。さらに、IDirect3DDevice9::Reset からの障害により、デバイスが失われた状態になります。
このエラーは、ゲーム ループの中心で発生するため、ゲーム ロジックで処理するのが難しい場合があります。どうやらあなたのゲームのプログラマーは非常にハックだが効果的な解決策を見つけたようです。彼は単にプログラムを再起動するだけです。これにより、プログラムの状態が復元され、ディスプレイが再取得されるとすぐにゲームが再開されます。
考えられる回避策は、WaitForExit() が完了した後しばらくスリープ状態にしてから、Process.GetProcessesByName() を使用してバックアップが開始されたかどうかを確認することです。これにより、新しいプロジェクト参照が取得され、すすぎと繰り返しが行われます。