用如下方法可以保证应用程序只运行一个实例。
添加引用
using System.Reflection; using System.Runtime.InteropServices; using System.Diagnostics;
调用DLL文件 [DllImport( " User32.dll " )] private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);[DllImport( " User32.dll " )] private static extern bool SetForegroundWindow(IntPtr hWnd); private const int WS_SHOWNORMAL = 1 ;
添加如下两个函数 public static Process RunningInstance(){ Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName(current.ProcessName); // Loop through the running processes in with the same name foreach (Process process in processes) { // Ignore the current process if (process.Id != current.Id) { // Make sure that the process is running from the exe file. if (Assembly.GetExecutingAssembly().Location.Replace( " / " , " \\ " ) == current.MainModule.FileName) { // Return the other process instance. return process; } } } // No other instance was found, return null. return null ;} public static void HandleRunningInstance(Process instance){ // Make sure the window is not minimized or maximized ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); // Set the real intance to foreground window SetForegroundWindow(instance.MainWindowHandle);}
在MAIN中添加如下代码 public static void Main(){ Process instance = RunningInstance() ; if (instance == null) { Application.Run(new Form1()) ; } else { HandleRunningInstance(instance) ; }}