只运行单一实例

方法1:

using System.Threading;

Mutex mutex;

public MainForm()
{
    InitializeComponent();

    mutex = new Mutex(false, "SINGLE_INSTANCE_MUTEX");
    if (!mutex.WaitOne(0, false))
    {
        mutex.Close();
        mutex = null;
    }
}

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
    //   Application.Run(new MainForm());  
    MainForm app = new MainForm();
    if (app.mutex != null)
    {
        Application.Run(new MainForm());
    }
    else
    {
        //    MessageBox.Show("实例已经运行!");
    }
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        if (components != null)
        {
            components.Dispose();
        }
        mutex.ReleaseMutex();
    }
    base.Dispose(disposing);
}
Contributors: FHL