mirror of
https://github.com/ShareX/ShareX.git
synced 2024-09-29 17:02:05 +13:00
Code refactoring
This commit is contained in:
parent
742f1af7d9
commit
e49158120b
2 changed files with 29 additions and 27 deletions
|
@ -34,7 +34,7 @@ namespace ShareX.HelpersLib
|
||||||
{
|
{
|
||||||
public class SingleInstanceManager : IDisposable
|
public class SingleInstanceManager : IDisposable
|
||||||
{
|
{
|
||||||
public event EventHandler<ArgumentsReceivedEventArgs> ArgumentsReceived;
|
public event Action<string[]> ArgumentsReceived;
|
||||||
|
|
||||||
public bool IsSingleInstance { get; private set; }
|
public bool IsSingleInstance { get; private set; }
|
||||||
public bool IsFirstInstance { get; private set; }
|
public bool IsFirstInstance { get; private set; }
|
||||||
|
@ -47,18 +47,22 @@ public class SingleInstanceManager : IDisposable
|
||||||
private readonly Mutex mutex;
|
private readonly Mutex mutex;
|
||||||
private CancellationTokenSource cts;
|
private CancellationTokenSource cts;
|
||||||
|
|
||||||
|
public SingleInstanceManager(string[] args) : this(true, args)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public SingleInstanceManager(bool isSingleInstance, string[] args)
|
public SingleInstanceManager(bool isSingleInstance, string[] args)
|
||||||
{
|
{
|
||||||
IsSingleInstance = isSingleInstance;
|
IsSingleInstance = isSingleInstance;
|
||||||
|
|
||||||
mutex = new Mutex(false, MutexName);
|
mutex = new Mutex(false, MutexName);
|
||||||
|
|
||||||
if (IsSingleInstance)
|
|
||||||
{
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
IsFirstInstance = mutex.WaitOne(100, false);
|
IsFirstInstance = mutex.WaitOne(100, false);
|
||||||
|
|
||||||
|
if (IsSingleInstance)
|
||||||
|
{
|
||||||
if (IsFirstInstance)
|
if (IsFirstInstance)
|
||||||
{
|
{
|
||||||
cts = new CancellationTokenSource();
|
cts = new CancellationTokenSource();
|
||||||
|
@ -70,6 +74,7 @@ public SingleInstanceManager(bool isSingleInstance, string[] args)
|
||||||
RedirectArgumentsToFirstInstance(args);
|
RedirectArgumentsToFirstInstance(args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (AbandonedMutexException)
|
catch (AbandonedMutexException)
|
||||||
{
|
{
|
||||||
DebugHelper.WriteLine("Single instance mutex found abandoned from another process.");
|
DebugHelper.WriteLine("Single instance mutex found abandoned from another process.");
|
||||||
|
@ -77,15 +82,10 @@ public SingleInstanceManager(bool isSingleInstance, string[] args)
|
||||||
IsFirstInstance = true;
|
IsFirstInstance = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
IsFirstInstance = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void OnArgumentsReceived(string[] arguments)
|
protected virtual void OnArgumentsReceived(string[] arguments)
|
||||||
{
|
{
|
||||||
ArgumentsReceived?.Invoke(this, new ArgumentsReceivedEventArgs(arguments));
|
ArgumentsReceived?.Invoke(arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ListenForConnectionsAsync()
|
private async Task ListenForConnectionsAsync()
|
||||||
|
@ -155,19 +155,21 @@ private void RedirectArgumentsToFirstInstance(string[] args)
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
cts?.Cancel();
|
if (cts != null)
|
||||||
cts?.Dispose();
|
{
|
||||||
mutex?.ReleaseMutex();
|
cts.Cancel();
|
||||||
}
|
cts.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ArgumentsReceivedEventArgs : EventArgs
|
if (mutex != null)
|
||||||
{
|
{
|
||||||
public string[] Arguments { get; private set; }
|
if (IsFirstInstance)
|
||||||
|
{
|
||||||
|
mutex.ReleaseMutex();
|
||||||
|
}
|
||||||
|
|
||||||
public ArgumentsReceivedEventArgs(string[] arguments)
|
mutex.Dispose();
|
||||||
{
|
}
|
||||||
Arguments = arguments;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -289,7 +289,7 @@ private static void Main(string[] args)
|
||||||
|
|
||||||
using (SingleInstanceManager singleInstanceManager = new SingleInstanceManager(!MultiInstance, args))
|
using (SingleInstanceManager singleInstanceManager = new SingleInstanceManager(!MultiInstance, args))
|
||||||
{
|
{
|
||||||
if (singleInstanceManager.IsFirstInstance)
|
if (!singleInstanceManager.IsSingleInstance || singleInstanceManager.IsFirstInstance)
|
||||||
{
|
{
|
||||||
singleInstanceManager.ArgumentsReceived += SingleInstanceManager_ArgumentsReceived;
|
singleInstanceManager.ArgumentsReceived += SingleInstanceManager_ArgumentsReceived;
|
||||||
|
|
||||||
|
@ -390,13 +390,13 @@ public static void Restart(bool asAdmin = false)
|
||||||
Application.Exit();
|
Application.Exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SingleInstanceManager_ArgumentsReceived(object sender, ArgumentsReceivedEventArgs e)
|
private static void SingleInstanceManager_ArgumentsReceived(string[] arguments)
|
||||||
{
|
{
|
||||||
if (WaitFormLoad(5000))
|
if (WaitFormLoad(5000))
|
||||||
{
|
{
|
||||||
MainForm.InvokeSafe(async () =>
|
MainForm.InvokeSafe(async () =>
|
||||||
{
|
{
|
||||||
await UseCommandLineArgs(e.Arguments);
|
await UseCommandLineArgs(arguments);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue