try {
try {
- int i = 0;
try {
- while (true) {
- Console.WriteLine ("Count: " + i++);
- Thread.Sleep (100);
+ int i = 0;
+ try {
+ while (true) {
+ Console.WriteLine ("Count: " + i++);
+ Thread.Sleep (100);
+ }
}
+ catch (ThreadAbortException e) {
+ Console.WriteLine ("cought exception level 3 ");
+
+ // Check that the exception is only rethrown in
+ // the appropriate catch clauses
+
+ // This doesn't work currently, see
+ // http://bugzilla.ximian.com/show_bug.cgi?id=68552
+
+ /*
+ try {
+ }
+ catch {}
+ try {
+ throw new DivideByZeroException ();
+ }
+ catch (Exception) {
+ }
+ */
+ result |= 32;
+
+ // Check that the exception is properly rethrown
+ }
+ result = 255;
} catch (ThreadAbortException e) {
Console.WriteLine ("cought exception level 2 " + e.ExceptionState);
Console.WriteLine (e);
if ((string)e.ExceptionState == "STATETEST")
result |= 1;
+
Thread.ResetAbort ();
throw e;
}
result |= 2;
}
} catch (Exception e) {
- Console.WriteLine ("cought exception level 0");
- Console.WriteLine (e);
+ Console.WriteLine ("cought exception level 0")
+; Console.WriteLine (e);
+ Console.WriteLine (e.StackTrace);
result |= 4;
}
}
public static int Main() {
+
+ // Check aborting the current thread
+ bool aborted = false;
+ try {
+ Thread.CurrentThread.Abort ();
+ }
+ catch {
+ aborted = true;
+ Thread.ResetAbort ();
+ }
+ if (!aborted)
+ return 2;
+
Thread t1 = new Thread(new ThreadStart
(MultiThreadExceptionTest.ThreadStart1));
t1.Name = "Thread 1";
Thread.Sleep (100);
t1.Start();
-
- //Thread t0 = Thread.CurrentThread;
- //t0.Abort ();
Thread.Sleep (200);
t1.Abort ("STATETEST");
t1.Join ();
Console.WriteLine ("Result: " + result);
- if (result != 27)
+ if (result != 59)
return 1;
+ // Test from #68552
+ try {
+ try {
+ Run ();
+ } catch (Exception ex) {
+ }
+
+ return 2;
+ }
+ catch (ThreadAbortException ex) {
+ Thread.ResetAbort ();
+ }
+
return 0;
}
+
+ public static void Run ()
+ {
+ try {
+ Thread.CurrentThread.Abort ();
+ } catch (Exception ex) {
+ throw new Exception ("other");
+ }
+ }
}