Я не знаю, является ли это лучшим решением, но я сделал небольшой обходной путь. Мой вызывающий поток подписался на событие для отлова исключений из всех потоков. Поэтому, когда исключение возникает в каком-то потоке, скажем, в событии TimerElapsed, тогда из блока catch я поднимаю объект исключения, передающий событие, в качестве аргумента события.
EventHolderCallingClass: он должен определять делегат и событие, как показано ниже.
public class EventHolderCallingClass
{
public delegate void HandleExceptionEventDelegate(Exception exception);
public event HandleExceptionEventDelegate HandleExceptionEvent ;
void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
//some operation which caused exception.
}
catch(Exception exception)
{
if(HandleExceptionEvent!=null)
HandleExceptionEvent(exception)
}
}
}
Класс обработчика событий (обработчик исключений):
public EventHandlerClassConstructor()
{
EventHolderCallingClass.HandleExceptionEvent += new EventHolderCallingClass.HandleExceptionEventDelegate(HandleExceptionEventHandler);
}
void HandleExceptionEventHandler(Exception exception)
{
//handle exception here.
}