Команда VB.Net уже внедрила решение. Вам нужно взять зависимость от Microsoft.VisualBasic.dll, но если это вас не беспокоит, то это ИМХО хорошее решение
См. Конец следующей статьи: Приложения для одного экземпляра
Вот соответствующие части из статьи:
1) Добавить ссылку на Microsoft.VisualBasic.dll
2) Добавьте следующий класс в ваш проект.
public class SingleInstanceApplication : WindowsFormsApplicationBase
{
private SingleInstanceApplication()
{
base.IsSingleInstance = true;
}
public static void Run(Form f, StartupNextInstanceEventHandler startupHandler)
{
SingleInstanceApplication app = new SingleInstanceApplication();
app.MainForm = f;
app.StartupNextInstance += startupHandler;
app.Run(Environment.GetCommandLineArgs());
}
}
Откройте Program.cs и добавьте следующий оператор using:
using Microsoft.VisualBasic.ApplicationServices;
Измените класс на следующий:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
SingleInstanceApplication.Run(new Form1(), StartupNextInstanceEventHandler);
}
public static void StartupNextInstanceEventHandler(object sender, StartupNextInstanceEventArgs e)
{
MessageBox.Show("New instance");
}
}