Ahmad Sabbagh
Ahmad Sabbagh

Reputation: 63

Application.Dispatcher.UnhandledException and CurrentDomain.UnhandledException

I'm investigating strange WPF multi threaded application hang that happen randomly on production machines more easily than development ones.

I have added Application.Dispatcher.UnhandledException and CurrentDomain.UnhandledException event handlers to log the every and each exception in order to keep the application from crashing as it is a system shell.

I suspect the reason of the hang is that I'm handling those events and not allowing the application to crash, what make me say this is that when i monitored the application activity when it hanged using windows task manager i noticed CPU load probably caused by background tasks in the application and those background tasks are writing to logs as expected.

The logger class writes the logs to the disk asynchronously using BeginInvoke.

The big problem is every time the application hangs in production machine i find nothing in log files.

Now i have two questions:

  1. What is the fire order of those events: "Application.Dispatcher.UnhandledException and CurrentDomain.UnhandledException".

2.Is there anyway i can manage to be able to know were my code is failing

Note: I use a lot of Thread.Sleep in background tasks as i manage the threads my self and i think i went wrong with this approach and I'm considering rewriting all of my background tasks from scratch.

Any help will be much appreciated.

Upvotes: 3

Views: 1185

Answers (1)

kmatyaszek
kmatyaszek

Reputation: 19296

Order of this event is:

  1. Application.DispatcherUnhandledException
  2. CurrentDomain.UnhandledException

If you want get information from exception where your code is failing, check property StackTrace. You can also attach to your project pdb files and in this case you will get StackTrace with line numbers.

Upvotes: 2

Related Questions