Пример #1
0
        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());
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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;
            }
        }
Пример #4
0
 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);
         }
     }
 }