PS: я не хочу добавлять исключение try / catch внутри ElapsedEventHandler ()
Поскольку класс Timer не поддерживает такое событие, как иначе вы бы поймалиисключение?
Если вы настаиваете на использовании класса Timer, то, возможно, это ваш единственный вариант:
var t = new System.Timers.Timer(1000);
t.Elapsed += (sender, e) => {
try
{
t_Elapsed(sender, e);
}
catch (Exception ex)
{
// Error handling here...
}
};
Таким образом, фактический обработчик t_Elapsed
не содержит обработки ошибок иВы можете создать класс-оболочку для класса Timer, который скрывает эту деталь реализации и, в свою очередь, предоставляет событие для обработки исключений.
Вот один из способов сделать это:
class ExceptionHandlingTimer
{
public event Action<Exception> Error;
System.Timers.Timer t;
public ExceptionHandlingTimer(double interval)
{
t = new System.Timers.Timer(interval);
}
public void Start()
{
t.Start();
}
public void AddElapsedEventHandler(ElapsedEventHandler handler)
{
t.Elapsed += (sender, e) =>
{
try
{
handler(sender, e);
}
catch (Exception ex)
{
if (Error != null)
{
Error(ex);
}
else
{
throw;
}
}
};
}
}