기본 콘텐츠로 건너뛰기

라벨이 Single Instance인 게시물 표시

How to force C# .net app to run only one instance in Windows?

Single Application을 생성하는 예제입니다. [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool SetForegroundWindow(IntPtr hWnd); /// /// The main entry point for the application. /// [STAThread] static void Main() { bool createdNew = true; using (Mutex mutex = new Mutex(true, "MyApplicationName", out createdNew)) { if (createdNew) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } else { Process current = Process.GetCurrentProcess(); foreach (Process process in Process.GetProcessesByName(current.ProcessName)) { if (process.Id != current.Id) { SetForegroundWindow(process.MainWindowHandle); break; } } } } }

Singleton 객체 만들기

프로젝트에서 Setting들을 저장하기 위해서 Singleton 객체를 만들어서 사용하곤 했었는데 이제껏 만들어 사용하던 것이 잘못되어 있던 것을 발견했습니다. class CAppDocData { CAppDocData(void); public: static CAppDocData& GetInstance(); ~CAppDocData(void); } 위의 클래스는 아래와 같이 복사 생성이 허용되기 때문에 Singleton 패턴이 깨어져 버립니다. CAppDocData docData = CAppDocData::GetInstance(); 따라서 복사 생성자를 private으로 두어 복사 생성을 하지 못하게 막아야합니다. class CAppDocData { CAppDocData(void); CAppDocData(const CAppDocData& rhs){} public: static CAppDocData& GetInstance(); ~CAppDocData(void); }