Hi all,
I have a question about "Handling Thread Exception":
What is the difference between "Handling each thread exception" and "Handling Application Thread Exception"
I'm making a test application to test "OutOfMemory Exception". I make about 8 threads to run these function:
private void btnStart_Click(object sender, EventArgs e) { for (int i = 1; i <= 8; i++) { List<object> processList = new List<object>(); Thread thread = new Thread(new ThreadStart(() => { TestExceptionWarpper(processList); })); thread.Name = string.Format("Test thread#{0}", i); thread.IsBackground = false; thread.Start(); } }
private void TestExceptionWarpper(List<object> objects) { try { DoTest(objects); } catch (OutOfMemoryException ex) { throw; } } private void DoTest(List<object> objects) { try { Thread.Sleep(1000); while (true) { objects.Add(new object()); } } catch (OutOfMemoryException oome) { throw; } catch (Exception generalException) { //do something } }
and I also register for these two events:
static void Main() { Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); Application.ThreadException += Application_ThreadException; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FormTestPeformance()); } static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { } static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { }
If I catch exception at TestExceptionWarpper method, the application is fine. It won't crash.
But if I throw the exception, the application crash.
All 3 handle functions are empty. I don't know what is the difference. And what make the application crash?
Please help me. Thanks a lot :)