refactor: 项目稳定性优化
This commit is contained in:
@@ -11,12 +11,16 @@ namespace TimerApp
|
||||
private const string MutexName = "Local\\TimerApp.SingleInstance";
|
||||
private const string PipeName = "TimerApp.SingleInstancePipe";
|
||||
|
||||
private readonly Mutex _mutex;
|
||||
private readonly Mutex? _mutex;
|
||||
private readonly bool _ownsMutex;
|
||||
private readonly bool _enableIpc;
|
||||
private readonly CancellationTokenSource _cts = new();
|
||||
|
||||
private SingleInstanceManager(Mutex mutex)
|
||||
private SingleInstanceManager(Mutex? mutex, bool ownsMutex, bool enableIpc)
|
||||
{
|
||||
_mutex = mutex;
|
||||
_ownsMutex = ownsMutex;
|
||||
_enableIpc = enableIpc;
|
||||
}
|
||||
|
||||
public static bool TryAcquire(out SingleInstanceManager? manager)
|
||||
@@ -32,11 +36,12 @@ namespace TimerApp
|
||||
return false;
|
||||
}
|
||||
|
||||
manager = new SingleInstanceManager(mutex);
|
||||
manager = new SingleInstanceManager(mutex, ownsMutex: true, enableIpc: true);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
manager = new SingleInstanceManager(mutex: null, ownsMutex: false, enableIpc: false);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -57,6 +62,7 @@ namespace TimerApp
|
||||
|
||||
public void StartServer(Action onShowRequested)
|
||||
{
|
||||
if (!_enableIpc) return;
|
||||
Task.Run(() => ServerLoop(onShowRequested, _cts.Token));
|
||||
}
|
||||
|
||||
@@ -104,15 +110,17 @@ namespace TimerApp
|
||||
|
||||
try
|
||||
{
|
||||
_mutex.ReleaseMutex();
|
||||
if (_ownsMutex)
|
||||
{
|
||||
_mutex?.ReleaseMutex();
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
|
||||
_mutex.Dispose();
|
||||
_mutex?.Dispose();
|
||||
_cts.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user