日期:2014-05-18 浏览次数:20924 次
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
using System.Reflection;
using System.Threading;
namespace TEST
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmMain());
Process instance = RunningInstance();
if (instance == null)
{
Application.Run(new FrmMain());
}
else
{
HandleRunningInstance(instance);
}
}
#region 进程名
public static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
foreach (Process process in processes)
{
if (process.Id != current.Id)
{
if (Assembly.GetExecutingAssembly().Location.Replace("/ ", "\\ ") == current.MainModule.FileName)
{
return process;
}
}
}
return null;
}
public static void HandleRunningInstance(Process instance)
{
ShowWindowAsync(instance.MainWindowHandle, 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);
private const int WS_SHOWNORMAL = 1;
#endregion
}
}
------解决方案--------------------
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = Form2.CreateInstance();
if (frm.WindowState == FormWindowState.Minimized)
{
frm.WindowState = FormWindowState.Normal;
}
else
{
frm.Show();
}
}
public partial class Form2 : Form
{
private static readonly object m_SyncObject = new object();
private static Form2 frm;
private Form2()
{
InitializeComponent();
}
public static Form2 CreateInstance()
{
if (frm == null)
{
lock (m_SyncObject)
{
if (frm == null)
{
frm = new Form2();
}
}
}
return frm;
}
}