여러 응용 프로그램 인스턴스를 피하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1015642

  •  06-07-2019
  •  | 
  •  

문제

"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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top