Pracuję z aplikacją Windows Forms i hava z klasą menedżera, która używa System.Timers.Timer do okresowego sprawdzania danych z bazy danych.Jak uzyskać wyjątek, który ma miejsce w zdarzeniu, które upłynęło w czasie?
Jak uzyskać wyjątek, który występuje w czasomierzu, który został dostarczony do głównej aplikacji? Jeśli korzystam z poniższego kodu, wyjątek get jest "połknięty", a główna aplikacja nigdy go nie pobiera (nawet jeśli mam procedury obsługi wyjątków ThreadException i UnHandledException).
// Main Form
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
// Manager class
private System.Timers.Timer _timer;
void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
doSomeDatabaseActions();
}
catch (Exception ex)
{
throw new ApplicationException("How do I get this error back into main thread...", ex);
}
}
Kod Przykład Proszę? – hrh
Myślę, że rozumiem, przekazałem wyjątek funkcji w moim głównym wątku, a następnie funkcja ta użyła this.Invoke() na funkcji przed wyrzuceniem wyjątku. Czy rozumiem to poprawnie? – hrh
Czy istnieje jakaś nowa metoda przechwytywania nieoczekiwanych błędów w .net 4.5? Nadal połyka i nie ma w ogóle logów błędów bez owijania całego _timer_Elapsed inside try catch? – MonsterMMORPG