Today I was adding a simple timeout functionality that should stop a thread after a period of time by calling thread.Abort(). It always did the right thing in my testProject so the more I was wondering why my actual thread survived the abort by just catching the exception instead of the usual pattern that even if the ThreadAbortException is caught it automatically will be re-thrown at the end of the catch (or at the end of the finally...) unless you disarm it by calling Thread.ResetAbort(). I did not call ResetAbort at all so I took a closer look to what I was doing in this thread... I was using IKVM to create a .NET library out of an JAVA-jar-file to use it from C#. The clou is, that ikvmc compiles java-Catch-Blocks to C# with an additional MapperCall and this will call ResetAbort which avoids rethrowing after the fellowing nested catch blocks. Not exactly what I expected but you deal with this behaviour easily since the exception is still thrown so you can add an extra catch Block for ThreadAbortException and exit as wanted.