여러 응용 프로그램 인스턴스를 피하는 방법은 무엇입니까?
문제
"myprogram.exe"호출이 "myprogram.exe"가 "myform.cs"의 새 인스턴스를 생성 한 다음 양식을 사용하여 표시하는이 함수 중 하나 인 DLL 내부에서 함수와 코드를 호출하는 "myProgram.exe"라는 응용 프로그램이 있습니다. .보여 주다();.
"myprogram.exe"인스턴스의 'n'수를 가질 수 있지만 "myprogram.exe"의 각 인스턴스에 대해 "myform.cs"인스턴스 만 갖고 싶습니다.
내가 가진 문제는 "myform.cs"내부에서 Mutx를 사용하여 Mutex를 만들고 인스턴스가 이미 실행 중인지 묻는다고 생각한다는 것입니다. 때로는 MUTEX에도 불구하고 다른 인스턴스가 생성됩니다.
"myProgram.exe"인스턴스가 이미 "myform.cs"인스턴스를 만들었을 때 유효성을 검사하는 데 사용할 수있는 또 다른 방법이 있습니까?
해결책
@joe의 의견에 따르면, 문제는 Mutux의 구현에있을 것입니다.
다른 질문에 대한 답변 올바른 방법을 보여줍니다.
K. Scott Allen이 있습니다 좋은 글 이 목적을 위해 뮤 테스를 사용하고 GC와 함께 실행할 문제.
기계의 모든 세션에서 실행되는 응용 프로그램의 하나의 인스턴스 만 사용하려면 Prefix "Global "를 사용하여 명명 된 MUTEX를 글로벌 네임 스페이스에 넣을 수 있습니다.
[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()); } }
다른 팁
C ++ 및 MFC에서 관련 기사를 찾을 수 없으므로 아래 링크를 게시합니다. 따라서 C ++, MFC 및 Win32의 경우 사용할 수 있습니다. http://flounder.com/nomultiples.htm