// try the five second method with a 6 second timeout CallWithTimeout(FiveSecondMethod, 6000 ); // try the five second method with a 4 second timeout // this will throw a timeout exception CallWithTimeout(FiveSecondMethod, 4000 ); static void FiveSecondMethod() Thread.Sleep( 5000 ); static void CallWithTimeout(Action action, int timeoutMilliseconds) Thread threadToKill = null ; Action wrappedAction = () => threadToKill = Thread.CurrentThread; action(); IAsyncResult result = wrappedAction.BeginInvoke( null , null ); if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds)) wrappedAction.EndInvoke(result); threadToKill.Abort(); throw new TimeoutException();