Jak mogę zachować ślad stosu, gdy wyjątek jest generowany w wątku innym niż UI
Jest to zła forma, ponieważ nie zachowuje śladu stosu:
try { /*... some code that can throw an exception ...*/ }
catch (Exception e)
{
throw e; // ...Use "throw;" by itself instead
}
Jeśli jednak wyjątek zostanie przechwycony w wątku innym niż interfejs użytkownika, chcę go podnieść do interfejsu użytkownika i obsłużyć go, aby użytkownik otrzymał wiadomość w ten sposób:
try { /*... some code that can throw an exception ...*/ }
catch (Exception e)
{
Dispatcher.Invoke((Action)(() => { throw; }));
}
Nie mogę jednak użyć słowa kluczowego throw tutaj, ponieważ C # lexer (poprawnie) nie myślirzucać instrukcja znajduje się wewnątrz ałapać. Muszę zamiast tego:
try { /*... some code that can throw an exception ...*/ }
catch (Exception e)
{
Dispatcher.Invoke((Action)(() => { throw e; }));
}
i ponownie rzuć wyjątek, który traci ślad stosu.
Czy istnieje jakikolwiek (łatwy) sposób obejścia tego problemu (zawsze mogłem spakować ślad stosu w momencie, gdy wyjątek jest gotowy do przełączania wątków, ale wydaje się to hokey)?
Uwaga: widziałemten wątek ale jest to tylko tytuł, a nie treść.