2012-01-07 2 views
4

내 프로그램이 주어진 시간에 여러 인스턴스를 실행하지 못하도록하고 있습니다. 나는 뮤텍스와 윈도우 이벤트를 사용하는 것에 대해 읽었지만, 두 스레드는 수 년 전이었고, .net4와 함께 처리하는 것이 더 간단하고 우아한 방법이 있는지 궁금하다. 나는 당신이 재산에 의해 여러 인스턴스를 거부 할 수있는 양식에 대한 설정에 대해 읽은 것 같아요? 누군가가 프로그램의 여러 인스턴스를 방지하는 가장 안전하고 간단한 방법에 대해 설명해 줄 수 있습니까?프로그램의 여러 인스턴스를 방지하는 가장 안전한 방법은 무엇입니까?

+11

가장 안전한 방법은 .NET의 Windows FormsApplicationBase.IsSingleInstance 속성에서 기본 제공 지원을 사용하는 것입니다. 적절하다면 추측하기 어렵습니다. 정확한 요구 사항을 설명하는 데 많은 노력을 기울이지 않았습니다. 그리고 아니, 지난 5 년간 아무것도 바뀌지 않았습니다. –

+0

명명 된 이벤트를 만듭니다. [여기]를 수행하는 방법에 살펴 보자 [1] [1] : http://stackoverflow.com/questions/447546/creating-win32-events-from-c-sharp – Odys

+0

한스 경우 당신은 그 해설을 실제 답변으로 만들 것입니다. 제가 선택한 답을 당신에게 줄 것입니다. –

답변

4

가장 안전한 방법은 .NET의 Windows FormsApplicationBase.IsSingleInstance 속성에서 기본 제공 지원을 사용하는 것입니다. 적절하다면 추측하기 어렵습니다. 정확한 요구 사항을 설명하는 데 많은 노력을 기울이지 않았습니다. 그리고 아니, 지난 5 년간 아무것도 바뀌지 않았습니다. - Hans Passant 1 월 7 일 0시 38 분

이 답변이 가장 좋았지 만 한스는 답변으로 제출하지 않았습니다.

3

VB에서는 Winforms 프로젝트의 프로젝트 수준 (속성> 일반)에서이를 설정할 수 있습니다. 당신은 .. 물론 변환을 필요로이 유사한 코드를 사용하여 C#에서

..

Dim tGrantedMutexOwnership As Boolean = False 
Dim tSingleInstanceMutex As Mutex = New Mutex(True, "MUTEX NAME HERE", tGrantedMutexOwnership) 

If Not tGrantedMutexOwnership Then 
' 
' Application is already running, so shut down this instance 
' 
Else 
' 
' No other instances are running 
' 
End If 

으악, 난 당신이

을() 호출하여 Application.Run 후 GC.KeepAlive(tSingleInstanceMutex)을 배치 할 필요가 있음을 언급하는 것을 잊었다
1
using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.Windows.Forms; 

namespace YourNameSpaceGoesHere 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 

      if (Process.GetProcessesByName("YourFriendlyProcessNameGoesHere").Length > 1) 
      { 
       MessageBox.Show(Application.ProductName + " already running!"); 
       Application.ExitThread(); 
      } 
      else 
      { 
       Application.EnableVisualStyles(); 
       Application.SetCompatibleTextRenderingDefault(false); 
       Application.Run(new YourStartUpObjectFormNameGoesHere()); 
      } 

     } 
    } 
} 
+0

좋고 깨끗한 답변입니다! 투표를하다 – Sylca

관련 문제