static void Main(string[] args) { try { var app = new BpcApplication(); app.Run(); } catch (Exception ex) { try { LoggingUtils.LogToConsole("Unhandled exception: " + ex); CoreApplication.Instance.Logger.LogError(Message.Common_UnhandledException, ex, ex.Message); #if DEBUG Console.Read(); #else System.Threading.Thread.Sleep(1000); #endif } catch (Exception ex2) { LoggingUtils.LogToConsole(ex2.ToString()); } } }
private void ExitThread(object state) { Logger.LogVerbose("Завершение работы приложения..."); var sortedList = new SortedList <int, List <ISubsystem> >(_subsystems.Count); foreach (var pair in _subsystems) { var subsystem = pair.Value; if (sortedList.ContainsKey(subsystem.DisposeOrder)) { sortedList[subsystem.DisposeOrder].Add(subsystem); } else { sortedList.Add(subsystem.DisposeOrder, new List <ISubsystem> { subsystem }); } } foreach (var pair in sortedList) { foreach (var subsystem in pair.Value) { Logger.LogVerbose(string.Format("Останов подсистемы '{0}'...", subsystem.Name)); Disposer.DisposeObject(subsystem); } } Thread.Sleep(1000); foreach (var pair in sortedList) { foreach (var subsystem in pair.Value) { Logger.LogVerbose(string.Format("Останов журналирования подсистемы '{0}'...", subsystem.Name)); subsystem.DisposeLogger(); } } var exitType = state == null ? "не задан" : ((ApplicationExitType)state).ToString(); Logger.LogInfo("Завершение работы приложения (тип выхода {0})", exitType); Thread.Sleep(1000); Disposer.DisposeObject(Logger); FileWriter.Close(); _exitEvent.Set(); Thread.Sleep(1000); if (state == null) { return; } Exited.RaiseEvent(this, new ApplicationExitEventArgs((ApplicationExitType)state)); var exitCode = (int)state; LoggingUtils.LogToConsole("exit with code: {0}", exitCode); Environment.Exit(exitCode); }
private void UnixSignalHandler(int signal) { var receivedSignal = (Signum)signal; switch (receivedSignal) { case Signum.SIGSEGV: case Signum.SIGFPE: case Signum.SIGABRT: // он же SIGIOT case Signum.SIGILL: LoggingUtils.LogToConsole("Received critical unix signal: " + receivedSignal); Logger.LogError(Message.Common_UnixCriticalSignalReceived, receivedSignal); Exit(ApplicationExitType.RestartApplication); break; default: Logger.LogInfo(Message.Common_UnixSignalReceived, receivedSignal); break; } }
private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) { try { CoreApplication.Instance.Logger.LogError(Message.Common_CriticalException, (Exception)e.ExceptionObject); UnexpectedErrorOccurred.RaiseEvent(this); CoreApplication.Instance.WaitForExit(); } catch (Exception ex) { try { CoreApplication.Instance.Logger.LogError(Message.Common_CriticalException, ex); } catch { LoggingUtils.LogToConsole("OnUnhandledException: " + ex); } } }