mirror of
https://github.com/ShareX/ShareX.git
synced 2024-09-28 23:42:13 +12: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 event EventHandler<ArgumentsReceivedEventArgs> ArgumentsReceived;
|
||||
public event Action<string[]> ArgumentsReceived;
|
||||
|
||||
public bool IsSingleInstance { get; private set; }
|
||||
public bool IsFirstInstance { get; private set; }
|
||||
|
@ -47,18 +47,22 @@ public class SingleInstanceManager : IDisposable
|
|||
private readonly Mutex mutex;
|
||||
private CancellationTokenSource cts;
|
||||
|
||||
public SingleInstanceManager(string[] args) : this(true, args)
|
||||
{
|
||||
}
|
||||
|
||||
public SingleInstanceManager(bool isSingleInstance, string[] args)
|
||||
{
|
||||
IsSingleInstance = isSingleInstance;
|
||||
|
||||
mutex = new Mutex(false, MutexName);
|
||||
|
||||
if (IsSingleInstance)
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
IsFirstInstance = mutex.WaitOne(100, false);
|
||||
IsFirstInstance = mutex.WaitOne(100, false);
|
||||
|
||||
if (IsSingleInstance)
|
||||
{
|
||||
if (IsFirstInstance)
|
||||
{
|
||||
cts = new CancellationTokenSource();
|
||||
|
@ -70,22 +74,18 @@ public SingleInstanceManager(bool isSingleInstance, string[] args)
|
|||
RedirectArgumentsToFirstInstance(args);
|
||||
}
|
||||
}
|
||||
catch (AbandonedMutexException)
|
||||
{
|
||||
DebugHelper.WriteLine("Single instance mutex found abandoned from another process.");
|
||||
|
||||
IsFirstInstance = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
catch (AbandonedMutexException)
|
||||
{
|
||||
DebugHelper.WriteLine("Single instance mutex found abandoned from another process.");
|
||||
|
||||
IsFirstInstance = true;
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void OnArgumentsReceived(string[] arguments)
|
||||
{
|
||||
ArgumentsReceived?.Invoke(this, new ArgumentsReceivedEventArgs(arguments));
|
||||
ArgumentsReceived?.Invoke(arguments);
|
||||
}
|
||||
|
||||
private async Task ListenForConnectionsAsync()
|
||||
|
@ -155,19 +155,21 @@ private void RedirectArgumentsToFirstInstance(string[] args)
|
|||
|
||||
public void Dispose()
|
||||
{
|
||||
cts?.Cancel();
|
||||
cts?.Dispose();
|
||||
mutex?.ReleaseMutex();
|
||||
}
|
||||
}
|
||||
if (cts != null)
|
||||
{
|
||||
cts.Cancel();
|
||||
cts.Dispose();
|
||||
}
|
||||
|
||||
public class ArgumentsReceivedEventArgs : EventArgs
|
||||
{
|
||||
public string[] Arguments { get; private set; }
|
||||
if (mutex != null)
|
||||
{
|
||||
if (IsFirstInstance)
|
||||
{
|
||||
mutex.ReleaseMutex();
|
||||
}
|
||||
|
||||
public ArgumentsReceivedEventArgs(string[] arguments)
|
||||
{
|
||||
Arguments = arguments;
|
||||
mutex.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -289,7 +289,7 @@ private static void Main(string[] args)
|
|||
|
||||
using (SingleInstanceManager singleInstanceManager = new SingleInstanceManager(!MultiInstance, args))
|
||||
{
|
||||
if (singleInstanceManager.IsFirstInstance)
|
||||
if (!singleInstanceManager.IsSingleInstance || singleInstanceManager.IsFirstInstance)
|
||||
{
|
||||
singleInstanceManager.ArgumentsReceived += SingleInstanceManager_ArgumentsReceived;
|
||||
|
||||
|
@ -390,13 +390,13 @@ public static void Restart(bool asAdmin = false)
|
|||
Application.Exit();
|
||||
}
|
||||
|
||||
private static void SingleInstanceManager_ArgumentsReceived(object sender, ArgumentsReceivedEventArgs e)
|
||||
private static void SingleInstanceManager_ArgumentsReceived(string[] arguments)
|
||||
{
|
||||
if (WaitFormLoad(5000))
|
||||
{
|
||||
MainForm.InvokeSafe(async () =>
|
||||
{
|
||||
await UseCommandLineArgs(e.Arguments);
|
||||
await UseCommandLineArgs(arguments);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue