Winform 응용 프로그램의 단일 루틴
11653 단어 단일 모드직장레저응용 프로그램의 단일 예활성화 창
그럼 싱글 패턴 의 실현 원 리 를 살 펴 보 자.
- public class SinglePattern
- {
- private static SinglePattern instance = null;
-
- public static SinglePattern Instance()
- {
- if (instance == null)
- {
- instance = new SinglePattern();
- }
- return instance;
- }
- }
이러한 가장 기본 적 인 단일 예 모드 에서 정적 변수 인 스 턴 스 를 사용 하여 SinglePattern 의 인 스 턴 스 를 저장 합 니 다.어쨌든 우리 프로그램 에 서 는 하나의 인 스 턴 스 만 있 고 이 를 통 해 SinglePattern. Instance () 방법 으로 돌아 오 는 인 스 턴 스 가 단일 인 스 턴 스 임 을 확인 하 였 습 니 다.
그러면 우 리 는 어떻게 WinForm 에서 Form 에 단일 창 을 만 들 수 있 습 니까?
조롱박 이 바 가 지 를 그 리 는 것 보다 정적 변수 와 유사 한 것 을 찾 아 존재 하 는 것 을 확인 해 야 한다.
파일 로 WinFrom 를 어떻게 실현 하 는 지 는 여기 서 더 이상 말 하지 않 겠 습 니 다.예 를 들 어 Mutex 를 어떻게 사용 하여 WinForm 을 실현 하 는 단일 예 를 들 어 보 자.
- bool isNew = false;
- Mutex mutext = new Mutex(true, "testFrom", out isNew);
testform 이라는 Mutext 가 존재 할 때 isNew 는 False 이 고 그렇지 않 으 면 True 입 니 다.이제 보 니 단 례 를 실현 한 윈 프 롬 에 이론 적 근거 가 생 겼 다.하지만 본사 에 서 는 WinForm 의 구조 함수 에 이런 판단 을 쓸 수 있 습 니 다. 이것 은 하나의 창의 단일 예 일 뿐 입 니 다.우 리 는 지금 응용 프로그램 등급 의 단일 예 를 원한 다.어디서부터 착수 할 까요?
조급해 하지 마 세 요. Main () 함 수 는 모든 프로그램의 입구 함수 입 니 다.여기 서 판단 을 넣 으 면 됩 니 다.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows.Forms;
- using System.Runtime.InteropServices;
- using System.Threading;
- using System.Diagnostics;
-
- namespace Young.Winfrom.Singleton
- {
- static class Program
- {
- // hWnd cmdShow
- [DllImport("user32.dll", EntryPoint = "ShowWindowAsync")]
- public static extern int ShowWindowAsync(IntPtr hWnd, int cmdShow);
-
- // hWnd
- [DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
- public static extern int SetForegroundWindow(IntPtr hWnd);
-
- static Mutex me;
-
- private const int SHOWNORMAL = 1; //
- private const int CLOSE = 0; //
- private const int MINISIZE = 2; //
- private const int MAXSIZE = 3; //
-
- /// <summary>
- /// 。
- /// </summary>
- [STAThread]
- static void Main()
- {
- bool isNew = false;
- me = new Mutex(true, "testFrom", out isNew);
-
- if (!isNew)
- {
- Process pro = GetProcess();
- if (pro != null)
- {
- IntPtr fromHandle = pro.MainWindowHandle;
- ShowWindowAsync(fromHandle, SHOWNORMAL);
- SetForegroundWindow(fromHandle);
- }
- return;
- }
- else
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new Form1());
- }
-
-
-
- }
-
- static Process GetProcess()
- {
- Process pro = Process.GetCurrentProcess();
- string current = pro.MainModule.FileName;
- Process[] pros = Process.GetProcessesByName(pro.ProcessName);
- int l = pros.Length;
- foreach (Process p in pros)
- {
- if (p.MainModule.FileName.Equals(current, StringComparison.CurrentCultureIgnoreCase))
- {
- if (p.Id != pro.Id)
- return p;
- }
- }
- return null;
- }
- }
- }
위의 예 에서 윈도 API 를 사용 하여 시작 루틴 을 활성화 하고 창 을 맨 위로 이동 합 니 다.
본문 은 '이 양' 블 로그 에서 나 왔 으 니 전재 를 사절 합 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 디자인 모델의 단례 모델소프트웨어 개발 과정에서 우리는 라인 탱크(threadpool), 캐시(cache), 대화상자, 선호 설정 등 하나만 필요로 하는 대상이 종종 있다.이러한 대상이 여러 개의 실례를 만들면 프로그램 행위 이상, 자원 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.