I have a problem when i want use mutex to force single instance of my program.
I a winform App with a WebBrowser Control. I need to autorestart if certain conditions ar
I'm not sure what exactly goes wrong in your case but some issues might be:
try finally
to close the mutex to maximize changes of proper cleanupMutex.WaitOne
will throw an AbandonedMutexException
instead of return true
. In this case your code will exit with an error box while you can just continue.Mutex
is there only for user convenience).example
the following example will require that you use Program.Restart
to restart the application. Else the time window can still be the problem.
static class Program
{
private static Mutex _mutex;
[STAThread]
static void Main()
{
_mutex = new Mutex(false, "myprogramkey");
try
{
try
{
if (!_mutex.WaitOne(1))
{
_mutex.Dispose();
_mutex = null;
MessageBox.Show("Error!");
return;
}
}
catch (AbandonedMutexException) { /* Mutex wasn't property released last time.*/ }
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
finally
{
if (_mutex != null)
{
_mutex.ReleaseMutex();
_mutex.Dispose();
}
}
}
public static void Restart()
{
if (_mutex != null)
{
_mutex.ReleaseMutex();
_mutex.Dispose();
_mutex = null;
Application.Restart();
}
}
}