2 // thread6.cs: Thread abort tests
5 using System
.Threading
;
9 public static int result
= 0;
10 public static object started
= new object ();
12 public static void ThreadStart1 () {
13 Console
.WriteLine("{0} started",
14 Thread
.CurrentThread
.Name
);
20 Monitor
.Pulse (started
);
25 Console
.WriteLine ("Count: " + i
++);
29 catch (ThreadAbortException e
) {
30 Console
.WriteLine ("cought exception level 3 ");
32 // Check that the exception is only rethrown in
33 // the appropriate catch clauses
35 // This doesn't work currently, see
36 // http://bugzilla.ximian.com/show_bug.cgi?id=68552
43 throw new DivideByZeroException ();
50 // Check that the exception is properly rethrown
53 } catch (ThreadAbortException e
) {
54 Console
.WriteLine ("cought exception level 2 " + e
.ExceptionState
);
55 Console
.WriteLine (e
);
56 if ((string)e
.ExceptionState
== "STATETEST")
62 } catch (ThreadAbortException e
) {
63 Console
.WriteLine ("cought exception level 1 " + e
.ExceptionState
);
64 Console
.WriteLine (e
);
65 if (e
.ExceptionState
== null)
68 } catch (Exception e
) {
69 Console
.WriteLine ("cought exception level 0")
70 ; Console
.WriteLine (e
);
71 Console
.WriteLine (e
.StackTrace
);
77 } catch (System
.Threading
.ThreadStateException e
) {
81 Console
.WriteLine ("end");
85 static string regress_78024 ()
88 Thread
.CurrentThread
.Abort ();
89 } catch (Exception e
) {
90 return "Got exception: " + e
.Message
;
96 public static int Main() {
97 return TestDriver
.RunTests (typeof (Tests
));
100 public static int test_0_abort_current () {
101 // Check aborting the current thread
102 bool aborted
= false;
104 Thread
.CurrentThread
.Abort ();
108 Thread
.ResetAbort ();
116 public static int test_0_test_1 () {
120 t1
= new Thread(new ThreadStart
121 (Tests
.ThreadStart1
));
122 t1
.Name
= "Thread 1";
128 Monitor
.Wait (started
);
133 t1
.Abort ("STATETEST");
138 Console
.WriteLine ("Result: " + result
);
145 public static int test_0_regress_68552 () {
149 } catch (Exception ex
) {
154 catch (ThreadAbortException ex
) {
155 Thread
.ResetAbort ();
161 public static int test_0_regress_78024 () {
166 catch (ThreadAbortException ex
) {
167 Thread
.ResetAbort ();
173 public class CBO
: ContextBoundObject
{
175 Thread
.CurrentThread
.Abort ("FOO");
179 public static int test_0_regress_539394 () {
180 // Check that a ThreadAbortException thrown through remoting retains its
182 AppDomain d
= AppDomain
.CreateDomain ("test");
183 CBO obj
= (CBO
)d
.CreateInstanceFromAndUnwrap (typeof (Tests
).Assembly
.Location
, "Tests/CBO");
184 bool success
= false;
186 Thread t
= new Thread (delegate () {
189 } catch (ThreadAbortException ex
) {
190 if ((string)ex
.ExceptionState
== "FOO")
198 return success
? 0 : 1;
201 public static int test_0_regress_4413 () {
202 // Check that thread abort exceptions originating in another thread are not automatically rethrown
203 object o
= new object ();
205 bool waiting
= false;
206 Action a
= delegate () {
207 t
= Thread
.CurrentThread
;
222 var ar
= a
.BeginInvoke (null, null);
233 } catch (ThreadAbortException
) {
235 } catch (ThreadAbortException
) {
237 Thread
.ResetAbort ();
244 public static void Run ()
247 Thread
.CurrentThread
.Abort ();
248 } catch (Exception ex
) {
249 throw new Exception ("other");