방법 1: 여러 프로세스만 실행 금지
clipboardPRint로 일반 복사본 보기
·········10·······20····· ···30········40········50·······60·········70········80 ·········90········100·······110·······120········130······ ·140· ······150
[STAThread]
public static void Main()
{
bool ret
System.Threading.Mutex mutex = new System.Threading. Mutex(true , application.ProductName, out ret);
if (ret)
{ System.Windows.Forms.Application.EnableVisualStyles(); //이 두 줄은 XP 시각적 스타일을 구현합니다.
System. .Forms.Application.DoEvents();
System.Windows.Forms.Application.Run(new Main())
// Main이 프로그램의 기본 형식입니다. 이 문장을 사용하지 마세요 이 프로그램이 종료됩니다. ", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
// 프롬프트 메시지는 삭제할 수 있습니다.
Application.Exit();//프로그램 종료 .Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out ret);
if (ret)
{
System.Windows.Forms.Application.EnableVisualStyles(); / /이 두 줄은 XP 시각적 스타일을 구현합니다.
System.Windows.Forms.Application.DoEvents();
System.Windows.Forms.Application.Run( new Main());
// Main은 프로그램의 주요 형태입니다. 콘솔 프로그램인 경우 이 문장을 사용하지 마세요.
같은 애플리케이션이 이미 실행 중이므로 한 번에 여러 프로그램을 실행하지 마세요. 같은 시간입니다. 이 프로그램이 곧 종료됩니다.
Application.Exit();//프로그램 종료
}
}
방법 2: 여러 프로세스 실행을 비활성화하고, 반복 실행 시 이전 프로세스 활성화
클립보드 인쇄로 일반 사본을 보시겠습니까?
·········10········20·········30········40 ·········50········60········70·······80·········90·· ···· ··100········110········120········130········140······· 150
[STAThread]
public static void Main()
{ //실행 중인 인스턴스를 가져옵니다.
프로세스 인스턴스 = RunningInstance()
if (instance == null)
{ System .Windows.Forms.Application.EnableVisualStyles(); //이 두 줄은 XP 시각적 스타일을 구현합니다.
System.Windows.Forms.Application.DoEvents();
//여기에는 다른 예가 없습니다. 양식을 보여주세요.
Application.Run(new Main());
}
else
{
//이 프로세스의 또 다른 인스턴스가 있습니다.
HandleRunningInstance(인스턴스);
}
}
공개 정적 프로세스 RunningInstance()
{
프로세스 현재 = Process.GetCurrentProcess();
프로세스[] 프로세스 = Process.GetProcessesByName(current.ProcessName);
//루프 실행 중인 프로세스를 통해 동일한 이름
foreach(프로세스의 프로세스 프로세스)
{
//현재 무시 프로세스
if (process.Id != current. Id)
{
//프로세스가 exe 파일에서 실행되고 있는지 확인하세요.
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\") == current.MainModule.FileName)
{
//반환 프로세스 인스턴스.
반품 절차;
}
}
}
//아니요 다른 인스턴스를 찾았습니다. 찾았으며 반환 null입니다.
null을 반환합니다.
}
public static void HandleRunningInstance(프로세스 인스턴스)
{
//창이 최소화되지 않았는지 확인하세요. 파일, WS_SHOWNORMAL);
//설정 실제 인스턴스를 전경으로 설정 창
SetForegroundWindow(instance.MainWindowHandle);
}
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
비공개 const int WS_SHOWNORMAL = 1;
[STAThread]
public static void Main()
{
//실행 중인 인스턴스를 가져옵니다.
프로세스 인스턴스 = RunningInstance();
if (인스턴스 == null)
{
System.Windows.Forms.Application.EnableVisualStyles(); //这两行实现 XP 可视风格
System.Windows.Forms.Application.DoEvents();
//여기에는 다른 인스턴스가 없습니다. 양식을 보여주세요.
Application.Run(new Main());
}
else
{
//이 프로세스의 또 다른 인스턴스가 있습니다.
HandleRunningInstance(인스턴스);
}
}
public static Process RunningInstance()
{
현재 프로세스 = Process.GetCurrentProcess();
프로세스[] 프로세스 = 프로세스 .GetProcessesByName(current.ProcessName);
//루프 실행 중인 프로세스를 통해 에서 동일한 이름
foreach(프로세스의 프로세스 프로세스)
{
//무시 현재의 프로세스
경우에 (process.Id != current.Id)
{
//프로세스가 exe 파일에서 실행되고 있는지 확인하세요.
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\") == current.MainModule.FileName)
{
//반환 기타 프로세스 인스턴스.
반품 프로세스;
}
}
}
//아니요 다른 인스턴스가 발견되었습니다. 반환 null입니다.
null 반환;
}
public static void HandleRunningInstance(프로세스 인스턴스)
{
//창이 최소화되지 않았는지 확인하세요. owHandle, WS_SHOWNORMAL) ;
//실제 인스턴스를 전경으로 설정합니다. 포인트 hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;