Files
2026-09-26 12:11:20 +07:00

49 lines
1.8 KiB
C#

using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml;
using Microsoft.Windows.AppLifecycle;
using System;
using System.Threading;
namespace HearingProtector;
public static class Program
{
[STAThread]
static void Main(string[] ___)
{
var mainInstance = AppInstance.FindOrRegisterForKey("HearingProtector_Main");
if (!mainInstance.IsCurrent)
{
// Мы не первый экземпляр — просим основной обработать активацию и выходим.
var activationArgs = AppInstance.GetCurrent().GetActivatedEventArgs();
mainInstance.RedirectActivationToAsync(activationArgs).AsTask().Wait();
return;
}
// Подписываемся на активации от будущих попыток запуска.
mainInstance.Activated += OnInstanceActivated;
// Стандартный запуск WinUI с правильным SynchronizationContext.
Application.Start(__ =>
{
var context = new DispatcherQueueSynchronizationContext(
DispatcherQueue.GetForCurrentThread());
SynchronizationContext.SetSynchronizationContext(context);
_ = new App();
});
}
// Срабатывает, когда кто-то пытается запустить второй экземпляр.
private static void OnInstanceActivated(object? sender, AppActivationArguments e)
{
// ВАЖНО: событие приходит из НЕ-UI потока, поэтому нужно маршалить.
var app = App.CurrentApp;
var window = app?.MainWindow;
if (window is MainWindow mw)
{
window.DispatcherQueue.TryEnqueue(() => mw.RestoreFromTray());
}
}
}