Esempio n. 1
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            Directory.SetCurrentDirectory(Path.GetDirectoryName(Utils.Utils.GetExecutablePath()));
            var identifier = $@"Global\{nameof(TCPingInfoView)}_{Directory.GetCurrentDirectory().GetDeterministicHashCode()}";

            var singleInstance = new SingleInstance.SingleInstance(identifier);

            if (!singleInstance.IsFirstInstance)
            {
                singleInstance.PassArgumentsToFirstInstance(e.Args.Append(Constants.ParameterShow));
                Current.Shutdown();
                return;
            }

            singleInstance.ArgumentsReceived.Subscribe(SingleInstance_ArgumentsReceived);
            singleInstance.ListenForArgumentsFromSuccessiveInstances();

            Current.Events().Exit.Subscribe(args =>
            {
                singleInstance.Dispose();
                Log.CloseAndFlush();
            });
            Current.Events().DispatcherUnhandledException.Subscribe(args =>
            {
                try
                {
                    if (Interlocked.Increment(ref _exited) != 1)
                    {
                        return;
                    }

                    var exStr = $@"未捕获异常:{args.Exception}";

                    Log.Fatal(args.Exception, @"未捕获异常");
                    MessageBox.Show(exStr, nameof(TCPingInfoView), MessageBoxButton.OK, MessageBoxImage.Error);

                    Current.Shutdown();
                }
                finally
                {
                    singleInstance.Dispose();
                    Log.CloseAndFlush();
                }
            });

            Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(@"##SyncfusionLicense##");

            Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly());

            var serviceCollection = new ServiceCollection();

            ConfigureServices(serviceCollection);

            ServiceProvider = serviceCollection.BuildServiceProvider();

            MainWindow = ServiceProvider.GetRequiredService <MainWindow>();
            MainWindow.ShowWindow();
        }
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            Directory.SetCurrentDirectory(Path.GetDirectoryName(Utils.Utils.GetExecutablePath()) !);
            var identifier = $@"Global\{nameof(BilibiliLiveRecordDownLoader)}";

            var singleInstance = new SingleInstance.SingleInstance(identifier);

            if (!singleInstance.IsFirstInstance)
            {
                singleInstance.PassArgumentsToFirstInstance(e.Args.Append(Constants.ParameterShow));
                Current.Shutdown();
                return;
            }

            singleInstance.ArgumentsReceived.ObserveOnDispatcher().Subscribe(SingleInstance_ArgumentsReceived);
            singleInstance.ListenForArgumentsFromSuccessiveInstances();

            Current.Events().Exit.Subscribe(_ =>
            {
                singleInstance.Dispose();
                Log.CloseAndFlush();
            });
            Current.Events().DispatcherUnhandledException.Subscribe(args =>
            {
                try
                {
                    if (Interlocked.Increment(ref _exited) != 1)
                    {
                        return;
                    }

                    var exStr = $@"未捕获异常:{args.Exception}";

                    Log.Fatal(args.Exception, @"未捕获异常");
                    MessageBox.Show(exStr, nameof(BilibiliLiveRecordDownLoader), MessageBoxButton.OK, MessageBoxImage.Error);

                    Current.Shutdown();
                }
                finally
                {
                    singleInstance.Dispose();
                    Log.CloseAndFlush();
                }
            });

            ThemeManager.Current.ApplicationTheme = null;

            Register();

            MainWindow = Locator.Current.GetService <MainWindow>();
            MainWindow.ShowWindow();
        }
 private void AppExit(int exitCode)
 {
     _singleInstance.Dispose();
     Log.CloseAndFlush();
     Current.Shutdown(exitCode);
     if (exitCode != 0)
     {
         Environment.Exit(exitCode);
     }
 }