views:

113

answers:

2

Subject says it all.

I want some code to run if my application is terminated by, say, ^C.

+1  A: 

See code below. To handle Ctrl-C in a console app, use the Console.CancelKeyPress event.

// does not work - no exception on Ctrl-C
//System.AppDomain.CurrentDomain.UnhandledException.Add(
//    fun _ -> printfn "app is about to die")

System.Console.CancelKeyPress.Add(
    fun _ -> printfn "app is about to die")
printfn "starting..."
System.Threading.Thread.Sleep(5000)  // press Ctrl-C
printfn "ended"
Brian
Note that this only handles ^C termination, not arbitrary process exit.
Mitya
+1  A: 

Use AppDomain.ProcessExit (http://msdn.microsoft.com/en-us/library/system.appdomain.processexit.aspx):

System.AppDomain.CurrentDomain.ProcessExit(fun _ -> ...)
Mitya
Maybe ProcessExit (http://msdn.microsoft.com/en-us/library/system.appdomain.processexit.aspx) will be more suitable for case of normal process termination. In simple console exampleSystem.AppDomain.CurrentDomain.ProcessExit.Add(fun _ -> printfn "ProcessExit")System.AppDomain.CurrentDomain.DomainUnload.Add(fun _ -> printfn "DomainUnload")it outputs "ProcessExit" after exit.
desco
Absolutely! How could I miss it?
Mitya