Обработка исключительных ситуаций и дальнейшее выполнение кода - C#

Узнай цену своей работы

Формулировка задачи:

Всем добрый день, столкнулся с такой проблемой: при нахождении какого-либо exception программа выполняет код из оператора catch и закрывает программу. Меня это не устраивает, т.к. в блоке try еще есть код, который обязательный к выполнению. Там идет чтение служб из списка и вывод их статуса. Но, когда попадается корявое название службы или т.п., то программа закрывается, не выводя остальные статусы служб. Прошу помощи в решении данного вопроса. Как сделать так, чтобы выкидывалась запись в консоль о корявом имени и программа выполнялась дальше, а не закрывалась?

Решение задачи: «Обработка исключительных ситуаций и дальнейшее выполнение кода»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using NLog;
 
namespace TestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Console.WriteLine("Run");
            bool _isRunning;
            _isRunning = true;
 
            try
            {
                while (_isRunning)
                {
                    StartService();
                    Thread.Sleep(5000);
                }
            }
            catch (Exception ex)
            {
                System.Console.WriteLine("Unexpected exception: " + ex.Message, ex);
            }
        }
 
        
        public static void StartService()
        {
            var fileName = "../config.txt";
            var services = new List<string>();
            var watchingServices = new List<ServiceController>();
            string tmpServices = null;
            int i = 0;
 
            try
            {
 
 
                using (var cfgSt = new StreamReader(fileName))
                {
                    while (!cfgSt.EndOfStream)
                        tmpServices += cfgSt.ReadLine();   
                }
 
                services = (tmpServices.Split(',')).ToList();
 
                foreach (var s in services)
                {
                    watchingServices.Add(new ServiceController(services[i]));
                    i++;
                }
 
                while (true)
                {
                    foreach (var s in watchingServices)
                    {
                        if ((s.Status.Equals(ServiceControllerStatus.Stopped)) ||
                            (s.Status.Equals(ServiceControllerStatus.StopPending)))
                        {
                            System.Console.WriteLine("Service '{0}' has been crashed. Turning on...", s.DisplayName);
                            s.Start();
                            System.Console.WriteLine("Service '{0}' started", s.DisplayName);
                        }
                        else
                        {
                            System.Console.WriteLine("Service '{0}' works normally", s.DisplayName);
                        }
                    }
 
                }
            }
            catch (Exception ex)
            {
                System.Console.WriteLine("Error has occured in working of service: " + ex.Message);
                //throw;
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы