Обработка исключительных ситуаций и дальнейшее выполнение кода - 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;
}
}
}
}