Beispiel #1
0
 public void OnExit()
 {
     _mainVm.OnUnload();
     Task.Run(() =>
     {
         UiInvoker.Invoke(() => _application.Shutdown());
     });
 }
Beispiel #2
0
        public static void Handle(Exception ex, bool forceShutdown = false, bool isSilent = false)
        {
            // TODO: localize

            LoggerFacade.WriteError(GetLogMessage(ex));

            var shutdown = forceShutdown;

            // возможна ситуация когда происходит подряд сразу несколько критических исключений,
            // в этом случае отображаем только первое и завершаем работу, остальные только логируем.
            if (shutdown && !IsShuttingDown.TrySet())
            {
                return;
            }

            if (!isSilent || shutdown)
            {
                var sourceEx = ExtractException(ex);
                var message  = sourceEx.Message + "Unknown error occurred.";

                if (shutdown)
                {
                    message += Environment.NewLine + "Application will be closed. Please contact developers for support." + Environment.NewLine +
                               "Restart Application ?";
                }

                // при вызове из App_OnDispatcherUnhandledException, стандартный MessageBox работает надёжно.
                UiInvoker.Invoke(() =>
                {
                    MessageBoxResult result;
                    if (Application.Current.MainWindow != null)
                    {
                        result = MessageBox.Show(Application.Current.MainWindow, message, AppInfo.AppName,
                                                 MessageBoxButton.YesNo, MessageBoxImage.Error);
                    }
                    else
                    {
                        // произошло ещё до инициализации главного окна
                        result = MessageBox.Show(message, AppInfo.AppName, MessageBoxButton.YesNo, MessageBoxImage.Error);
                    }

                    if (result == MessageBoxResult.Yes)
                    {
                        System.Windows.Forms.Application.Restart();
                    }
                });
            }

            if (shutdown)
            {
                Environment.Exit(0);
            }
        }
Beispiel #3
0
        public new static void Exit()
        {
            if (IsExiting)
            {
                return;
            }

            IsExiting = true;

            _mainVm?.OnUnload();

            Task.Run(() =>
            {
                UiInvoker.Invoke(() => _application.Shutdown());
            });
        }
Beispiel #4
0
        private void InitializeMainWindow()
        {
            _mainVm = new MainViewModel(ServiceLocator.Current.GetInstance <IEmployeesModelService>(),
                                        ServiceLocator.Current.GetInstance <IDepartmentModelService>());
            _mainwindow             = (Views.MainWindow)Shell;
            _mainwindow.DataContext = _mainVm;

            Application.Current.MainWindow = _mainwindow;
            Application.Current.MainWindow.Show();
            _mainwindow.Open();

            Task.Run(() =>
            {
                _initializedEvent.WaitOne();
                UiInvoker.Invoke(() =>
                {
                    ProcessCommandLineArgs(_cmdArgs);
                });
            });
        }