2009-06-18 8 views
1

"myprogram.exe"は、関数 "myprogram.exe"を持っています。この関数は、 "myprogram.exe"がwinform "MyForm.cs"の新しいインスタンスを作成して表示するこの関数の1つで、関数とコードを呼び出しますform.show();を使用します。複数のアプリケーションインスタンスを回避するにはどうすればよいですか?

「myprogram.exe」インスタンスを「n」個持つことができますが、「myprogram.exe」のインスタンスごとに「MyForm.cs」というインスタンスを1つしか作成しません。

「MyForm.cs」の中にmutexを使用してミューテックスを作成していて、そのインスタンスがすでに実行されているかどうかを尋ねても、ミューテックスにもかかわらず、 。

"myprogram.exe"のインスタンスが既に "MyForm.cs"のインスタンスを作成しているかどうかを検証するために使用できる別の方法がありますか?

+0

を参照してください。http://stackoverflow.com/questions/229565/what-is-a-good-pattern-for-using-a-global-mutex-in -c/229567とhttp://stackoverflow.com/questions/819773/run-single-instance-of-an-application-using-mutex – Noldorin

+0

私はミューテックスに間違ったことをしていると思います。ミューテックスが自分の仕事をしていなければ、一般的に言えば、重大な問題があります。 – Joe

+0

これは参考になるかもしれません:http://stackoverflow.com/questions/975250/reliably-detecting-that-another-of-my-applications-is-running –

答えて

4

@ Joeのコメントによれば、問題はMutuxの実装にある可能性があります。

This answer to another questionはそれを行うための正しい方法を示しています

K.スコット・アレンは、この目的のため、あなたがGCでに実行されます問題については、ミューテックスを使用してa good write upを持っています。

マシン上のすべてのセッションでアプリケーションのインスタンスを1つしか実行しない場合は、名前付きミューテックスを接頭辞「グローバル\」のグローバル名前空間に入れることができます。

[STAThread] 
static void Main() 
{ 
    using(Mutex mutex = new Mutex(false, "Global\\" + appGuid)) 
    { 
     if(!mutex.WaitOne(0, false)) 
     { 
     MessageBox.Show("Instance already running"); 
     return; 
     } 

Application.Run(new Form1()); 
    } 
} 
+0

ありがとうございます。私は似たような質問を投稿しようとしていました。 – bdhar

1

私はC++とMFCのいずれかの関連記事を見つけることができなかったので、私は、下のリンクを投稿してください。したがって、 C++、MFC、Win32の場合はhttp://flounder.com/nomultiples.htm

関連する問題