public void OnExit() { _mainVm.OnUnload(); Task.Run(() => { UiInvoker.Invoke(() => _application.Shutdown()); }); }
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); } }
public new static void Exit() { if (IsExiting) { return; } IsExiting = true; _mainVm?.OnUnload(); Task.Run(() => { UiInvoker.Invoke(() => _application.Shutdown()); }); }
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); }); }); }