2016-09-05 12 views
0

を殺します。実行中は、新しいインスタンスを開始するたびに最初のインスタンスが前面に表示されます。ミューテックスは、これが私のコードでアプリケーション

しかし実際には2~10回の起動試行後に最初のインスタンスのGUIが強制終了され、プロセスはまだ実行中であり、Mutexをブロックしており、TaskManagerでのみ強制終了できます。この振る舞いをデバッグしてVisualStudioでアプリケーションを実行しようとすると、決して起こりません。アプリケーションを50回開こうとすると決してそれを殺すことはないので、発生するようなイベントには従うことができません。

GarbageCollectorの正常な動作ですか?それはぶら下がっている場合に備えて、最初のインスタンスを殺しますか? 何か不足していますか?

+0

「最初のインスタンスのGUIが殺された」とはどういう意味ですか?どういうことが起こりますか? – slawekwin

+3

これはなぜこれがmutexと関係していると思いますか? 「殺された」とはどういう意味ですか?例外はありますか?プロセスは引き続き実行されますか?また、 'Process.MainWindowHandle'はあまり有用ではありません - あなたは有効なハンドルを取得していることを確認して、それを適切な方法で使用していますか?(P/Invokesを使用しています。醜い方法)?あなたは戻り値をチェックしましたか? 'ShowWindow'と' SetForegroundWindow'のドキュメントを徹底的に読みましたか? – Luaan

+0

私は、アプリケーションが開かれていることを意味し、私はTaskBarにインスタンスを持ち、それをクリックして作業することができます。そして、私は別のアプリケーションからプロセスとしてインスタンスを開こうとすると、このコードは2番目のインスタンスで実行され、最初のインスタンスはTaskBarから消え、プロセスとしてTaskManagerに留まり、新しいMutexesをブロックします。 – ecth

答えて

0

さて、@ Luanは、問題はミューテックスではないと言いました。 私は、このソリューションで私のコードを固定:

https://stackoverflow.com/a/9059657/3319147

ShowWindowAsyncとハンドルののIntPtr値のわずかに異なる取り扱いがが安定し、この方法の詳細を作るようです。それ以来それをクラッシュできませんでした。私にとってこれは十分な安定性です:)

関連する問題